私が使用してテキストモードで表現することができるオブジェクトのための小さなインターフェースそうのようなoperator<<
を作成しました:フレンドオペレータとのインターフェイス<<:なぜリンクできませんか?
// ICliObject.h
class ICliObject
{
public:
~ICliObject() = default;
friend std::ostream& operator<<(std::ostream& p_stream, const ICliObject& p_cliUiObject);
protected:
virtual void print(std::ostream& p_stream) const = 0;
};
std::ostream& operator<<(std::ostream& p_stream, const ICliObject& p_cliUiObject)
{
p_cliUiObject.print(p_stream);
return p_stream;
}
エラー:In blablabla.cpp: multiple definition of operator<<(std::ostream& p_stream, const ICliObject& p_cliUiObject)
すべての派生クラスで、私はオペレータを再定義/宣言しませんでした。私が問題を解決できる唯一の方法は、オペレータをインラインでICliObject.h
にインライン化することです。 何が起こっているのですか?
注:私はUbuntuでGCCを使用しています。
ヘッダーの関数定義を 'inline'キーワードでマークするか、それをソースファイルに移動してください。 –
関数定義に 'inline'を追加する必要があります。 –
リンカーエラーをコピーして、SOでそれを検索してください。あなたは、そのテーマに関する1つ以上の質問を見つけるかもしれません。 –