错误LNK2019:未解析的外部符号
error LNK2019: unresolved external symbol
我有一个模板类,当我运行程序时它说
错误LNK2019:未解析的外部符号"类std::basic_ostream> &__cdecl operator<<(类std::basic_ostream> &,类CSet &)"(??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$CSet@H@@@Z)在函数"public: void __thiscall Menu:: Menu (void)"中引用(? menu@Menu@@QAEXXZ)
在我尝试使用的任何数据结构上,如果有人能告诉我为什么打印函数重载会导致这个错误,我会很高兴听到的。
template <class T> class CSet{
T* Array;
int size;
public:
CSet()
{
Array = NULL;
size = 0;
}
CSet(CSet& other){
size = other.size;
Array = new T[size];
for (int i = 0; i < size; i++)
Array[i] = other.Array[i];
}
friend ostream& operator <<(ostream& out, CSet& other);
~CSet()
{
if (size > 0)
delete[] Array;
}
};
template <class T> ostream& operator <<(ostream& out, CSet<T>& other){
out << "(";
for (int i = 0; i < other.size; i++){
if (size>1)
out << other.Array[i] < ",";
else
out << other.Array[i];
}
out << ")" << endl;
return out;
}
friend
声明没有声明一个函数模板,而是为类模板的每个实例化声明一个单独的函数。因此,您定义的模板与这些函数不同,它们仍然是未定义的。
有两个选项可以解决这个问题。
在类中定义friend
操作符,而不是在类中声明:
friend ostream& operator <<(ostream& out, CSet& other) {
// implementation
}
或者在类定义之前声明函数模板:
template <class T> class CSet;
template <class T> ostream& operator <<(ostream& out, CSet<T>&);
并声明模板为友元:
friend ostream& operator << <T>(ostream& out, CSet&);
^^^
相关文章:
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- 未解析的外部符号_MsiLocateComponentW@12.
- 在C++中使用 gRPC 时未解析的外部符号
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 我收到错误LNK2001:未解析的外部符号(C++代码)
- 可视抽象类 c++(错误 LNK 2001:未解析的外部符号)
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- 当 lib 已添加到其他依赖项时,如何在 VS 中调试未解析的外部符号错误
- 仅在少数方法(静态或共享库)中解析的外部符号
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 使用静态 constexpr 成员的未解析外部符号
- 引入参数化构造函数后显示 LNK 2019 未解析外部符号的代码错误
- Dlib LNK2001未解析的外部符号USER_ERROR__consistent_build_configurati
- 矛盾的未解决的外部符号+未使用的库与VS2017和FFMPEG 4
- 链接器错误:切换到unicode生成给出:未解析的外部符号WinMain
- 类模板上一个特定函数的未解析外部符号
- LNK2001:未解析的外部符号public:static类std::vector