类模板构造函数中引用的未解析的外部符号(在VS 2008中)

时间:2014-10-06 12:28:58

标签: c++ templates linker-errors

以下MWE无法在VS 2008中编译

Bar.h

struct Bar
{
    Bar();
};

Bar.cpp

#include "Bar.h"

Bar::Bar()
{
}

foo.h中

#include "Bar.h"

template<typename T>
class Foo
{
public:
    Foo()
    {
    }

private:
    Bar m_bar;
};

的main.cpp

#include "Foo.h"

int main()
{
    Foo<int> f;
    return 0;
}

错误讯息:

error LNK2019: unresolved external symbol "public: __thiscall Bar::Bar(void)" (??0Bar@@QAE@XZ) referenced in function "public: __thiscall Foo<int>::Foo<int>(void)" (??0?$Foo@H@@QAE@XZ)

然而,相同的代码成功在GCC 3.4.4中编译 - 我知道的旧编译器,但它目前是我在我的机器上获得的最新版本。此代码是否符合标准,还是VS 2008错误?

1 个答案:

答案 0 :(得分:0)

只要Bar.cpp也被编译和链接,代码完全正确,这是一个VC ++ - Bug。检查您是否正确设置了项目。