这个问题在这里已有答案:
我有一个这样定义良好的类,
class A
{
public:
A();
A(int a);
A(const A& o);
A(A&& o);
~A();
A& operator=(const A& o);
A& operator=(A&& o);
private:
int a = 0;
};
首先,所有方法都在.h文件中。然后我使用VS的重构函数并将所有这些方法移动到.cpp文件中(它为我节省了很多劳力。)
所有自动移动的方法都有一个内联关键字,
inline A::A()
{
cout << "A constructor\n";
}
我知道内联关键字,所以我认为没关系。
然后我在第三个源文件(.cpp文件)中使用了这个类。
void test()
{
std::unique_ptr< A> a = std::make_unique<A>();
}
当我编译项目时,它给了我一个错误LNK2019发生在make_unique中。
然后我删除了所有内联关键字,它工作。我不知道为什么当类的consturctor内联时make_unique不起作用。
我认为这是一个unique_ptr问题。我刚测试过,它是一个移动内联函数到.cpp文件的问题。
使用.cpp文件中的内联构造函数。只创建一个A类实例就会失败。
A a;
严重性代码说明项目文件行抑制状态错误LNK2019未解析的外部符号“public:__thiscall __AWellDefinedClass :: A :: A(void)”(?? 0A @__ AWellDefinedClass @@ QAE @ XZ)在函数“void __cdecl __pointerTest :: test”中引用(void)“(?test @__ pointerTest @@ YAXXZ)ForTest D:\ test \ ForTest \ ForTest \ pointerTest.obj 1