为什么make_unique不能与具有内联构造函数的类一起使用? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有一个这样定义良好的类,

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文件中(它为我节省了很多劳力。)enter image description here

所有自动移动的方法都有一个内联关键字,

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不起作用。

c++11 smart-pointers
1个回答
0
投票

我认为这是一个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

© www.soinside.com 2019 - 2024. All rights reserved.