C++ 与friend operator的接口<&书信电报;:为什么可以';是链接吗?

C++ 与friend operator的接口<&书信电报;:为什么可以';是链接吗?,c++,friend-function,linker-errors,C++,Friend Function,Linker Errors,我已经为对象创建了一个小界面,可以使用操作符以文本模式表示。这与友人或操作符无关。这与友人或操作符无关。它们在标题中用内联关键字标记函数定义,或者将其移动到某个源文件。您需要将内联添加到函数定义中。复制链接器错误并在SO中搜索它。你可能会发现关于这个主题的一个或多个问题。我有,但大多数人忘记了不要重新定义/声明。另外,我已经找到了内联解决方案,我只想知道为什么这里需要它。感谢链接器不要抱怨在多个翻译单元中定义了相同的符号,这是inline关键字存在的原因。或者在标题中用inline关键字标记函数

我已经为对象创建了一个小界面,可以使用
操作符以文本模式表示。这与
友人
操作符无关。这与
友人
操作符无关。它们在标题中用
内联
关键字标记函数定义,或者将其移动到某个源文件。您需要将
内联
添加到函数定义中。复制链接器错误并在SO中搜索它。你可能会发现关于这个主题的一个或多个问题。我有,但大多数人忘记了不要重新定义/声明。另外,我已经找到了内联解决方案,我只想知道为什么这里需要它。感谢链接器不要抱怨在多个翻译单元中定义了相同的符号,这是
inline
关键字存在的原因。或者在标题中用
inline
关键字标记函数定义,或者将其移动到某个源文件。您需要将
内联
添加到函数定义中。复制链接器错误并在SO中搜索它。你可能会发现关于这个主题的一个或多个问题。我有,但大多数人忘记了不要重新定义/声明。另外,我已经找到了内联解决方案,我只是想知道为什么它在这里是必要的。感谢链接器不要抱怨在多个翻译单元中定义了相同的符号,这是
inline
关键字存在的原因。另一种可能的解决方案是在类定义中定义函数(因为这使它隐式地
inline
),因此我在类之外添加了定义(但在相同的头文件中)对于
运算符,另一种可能的解决方案是在类定义内定义函数(因为这使它隐式地
内联
),因此我在类外(但在相同的头文件中)为
运算符添加了定义
// 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;
}