在重载运算符时未解析的外部

时间:2017-03-16 06:39:01

标签: c++ dll linker operator-overloading unresolved-external

我有一个简单的C ++类,如下所示:

class  __declspec(dllexport) PrefData
{
public:
  PrefData();
  int m_data_member;
};

std::ostream& operator<<(std::ostream& os, const PrefData& obj);

这导致未解决的外部符号class std::basic_ostream > & __cdecl cop4530::operator<<出现未解决的外部错误。现在,我试图让它成为一个类成员:

class  __declspec(dllexport) PrefData
{
public:
  PrefData();
  int m_data_member;
  friend std::ostream& operator<<(std::ostream& os, const PrefData& obj);
};

这也导致了同样的错误。但是,当我将其导出为:

class  __declspec(dllexport) PrefData
{
public:
  PrefData();
  int m_data_member;
};

__declspec(dllexport) std::ostream& operator<<(std::ostream& os, const PrefData& obj);

这链接很好。因为dllexport被应用于整个班级,所以我不确定为什么它是一个类成员函数时没有链接?其次,导出这个运营商是个坏主意吗?我在某处读到这可能不是一件好事,但我无法弄清楚细节。

0 个答案:

没有答案