私はヘッダーファイルとcppファイルを持っています... .hファイルで私はZZZ
クラスを宣言し、いくつかのプライベートパラメータを追加し、friend
関数を宣言しましたが、私が.cppファイルのprivateパラメータにアクセスしようとすると、エラー:cppファイルのfriend関数の使い方は?
error: within this context
output << zzz.ZZZ_name << "." ;
そして、私はプライベートparametrsでhederファイルでも、このエラーが出る:
error: 'std::string X::Y::ZZZ::ZZZ_name' is private
string ZZZ_name;
ZZZ.h
#include <iostream>
#include <string>
using std::string;
namespace X {
namespace Y {
class ZZZ {
private:
string ZZZ_name;
public:
friend std::ostream &operator<<(std::ostream &output, const ZZZ &zzz);
};
std::ostream &operator<<(std::ostream &output, const ZZZ &zzz);
}}
ZZZ.cpp
#include "ZZZ.h"
#include <stdbool.h>
using namespace X::Y;
using std::cout;
std::ostream& operator<<(std::ostream& output, const ZZZ& zzz){
output << zzz.ZZZ_name << "." ;
return output;
}
ヘッダの参照の名前空間 'X'と 'Y'を。 '.cpp'ファイルは、' x'と 'y'という名前の異なる名前空間を完全に参照しています。これは明らかに実際のコードではなく、ファンタジーコードです(関数宣言に閉じ括弧がないヘッダーファイルの明白な構文エラーはもちろんありません)。実際のコードで問題が発生した場合に役立つ回答を得たい場合は、偽のコードで全員の時間を無駄にする代わりに、[mcve]形式で実際のコードを表示する必要があります。失敗します。 –
私はあなたの時間beecause私はあなたに尋ねなかった:) beecauseも私のコードは非常に大きく、私はこの特定のものについてaskeしたいと思っていた...と私は1000 +のコードを挿入する場合誰も私を助けるだろう知っている。そのアイデアは非常に明確です:友達の関数をcppと宣言する方法 – kasandra
@kasandraこのサンプルコードをコンパイルしましたか? godboltは、演算子について不平を言う前に、見つからないかっこと不正な名前空間の両方を指摘します。 –