2017-06-25 7 views
-4

私はヘッダーファイルと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; 
} 
+1

ヘッダの参照の名前空間 'X'と 'Y'を。 '.cpp'ファイルは、' x'と 'y'という名前の異なる名前空間を完全に参照しています。これは明らかに実際のコードではなく、ファンタジーコードです(関数宣言に閉じ括弧がないヘッダーファイルの明白な構文エラーはもちろんありません)。実際のコードで問題が発生した場合に役立つ回答を得たい場合は、偽のコードで全員の時間を無駄にする代わりに、[mcve]形式で実際のコードを表示する必要があります。失敗します。 –

+0

私はあなたの時間beecause私はあなたに尋ねなかった:) beecauseも私のコードは非常に大きく、私はこの特定のものについてaskeしたいと思っていた...と私は1000 +のコードを挿入する場合誰も私を助けるだろう知っている。そのアイデアは非常に明確です:友達の関数をcppと宣言する方法 – kasandra

+0

@kasandraこのサンプルコードをコンパイルしましたか? godboltは、演算子について不平を言う前に、見つからないかっこと不正な名前空間の両方を指摘します。 –

答えて

-2

あなたが宣言されているあなたの友人の機能は内部XY名前空間なので、あなたがソースファイル内の定義がすでに宣言プロトタイプに属しているコンパイラに指示する必要があります。

std::ostream& operator<<(std::ostream& output, const ZZZ& zzz); 

したがって、定義が前方宣言のない新しい関数ではないという曖昧さを解決するには、ソースファイル内の名前空間の前に接頭辞を付ける必要がありますE:

std::ostream& X::Y::operator<<(std::ostream& output, const ZZZ& zzz) { 
    output << zzz.ZZZ_name << "." ; 
    return output; 
} 

あるいは、別のオプションとして、あなたにも次の操作を行うことができます。

namespace X { namespace Y { 
    std::ostream& operator<<(std::ostream& output, const ZZZ& zzz) { 
     output << zzz.ZZZ_name << "." ; 
     return output; 
    } 
}} 
+0

私の場合はできません!教授はしないように頼んだ:\ – kasandra

+0

それは大丈夫です、私は私の答えを編集しました。 – Akira

+0

おかげで私はおそらくそれが働いたと思う:) – kasandra

関連する問題