以下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错误?
答案 0 :(得分:0)
只要Bar.cpp
也被编译和链接,代码完全正确,这是一个VC ++ - Bug。检查您是否正确设置了项目。