gpt4 book ai didi

c++ - 为什么使用右值引用参数移动模板方法会给出未解析的外部符号错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:07 27 4
gpt4 key购买 nike

<分区>

这是一个简单的类来说明问题:

class ClassA
{
public:
template<typename T>
void Method1(T&& a) {};
};

然后在我的主要部分:

    double a = 0;

ClassA classA;
classA.Method1(a);

这编译得很好。但是当我将 Method1 实现移动到 cpp 文件时,就像这样......

标题:

class ClassA
{
public:
template<typename T>
void Method1(T&& a);
};

实现:

template<typename T>
void ClassA::Method1(T&& a) {}

template void ClassA::Method1<double>(double&&);

我在 Visual Studio 2013 中收到错误消息

error LNK2019: unresolved external symbol "public: void __thiscall ClassA::Method1(double &)" (??$Method1@AAN@ClassA@@QAEXAAN@Z) referenced in function _wmain

现在,如果在 main 中,我将对 Method1 的调用替换为classA.Method1(std::move(a))

它编译得很好。为什么只有 header 的版本在没有 std::move 的情况下可以正常编译,而带有实现的版本需要 std::move 才能编译?

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com