我有一个定义明确的类,
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中发生了。
然后我删除了所有内联关键字,它起作用了。 我不知道为什么当类的构造函数为内联时make_unique不起作用。
答案 0 :(得分:0)
我认为这是一个unique_ptr问题。我刚刚测试过,它是将内联函数移至.cpp文件的问题。
.cpp文件中有一个内联构造函数。仅创建一个类实例将失败。
<YourTenantName>.b2clogin.com
严重性代码描述项目文件行抑制状态 错误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