这是vs的解释有很多很复杂
https://docs.microsoft.com/zh-cn/cpp/error-messages/tool-errors/linker-tools-error-lnk2001?view=msvc-160#what-is-an-unresolved-external-symbol
对于像我一样的初学者很可能就是在你自己创建类时,可能时自己提供了有参构造函数但没有提供默认构造,然后实例化对象时有用到了默认构造,就会出现这样的错误。这是构造函数的调用规则问题,可以自己再找找资源。
总而言之就是,当我们自己写了有参构造,就必须要写默认构造,当我们写了拷贝构造函数,就必须要写有参构造和默认构造!
当你写的代码多时,这样的错误并不好找,所以当一定要注意在提供有参构造的同时要提供默认构造。
比如:
#include<iostream>
using namespace std;
class Person
{
public:
Person(string name,int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
}
int main()
{
Person p;//这里就会用到默认构造函数,但我们没有提供,就会出现LNK2001
system("pause");
return 0;
}
当然,这个代码很少,所以很好检查出错误,但是当代码很多时就不一样了。