我正在尝试用C ++编译一个项目,VS 2012,我遇到了LNK 2019错误。我的所有头文件都有#ifndef宏。我认为我对包含在包含辅助函数的命名空间中的文件感到困惑,因为我不熟悉使用命名空间并且可能使用它们错误。它看起来像这样:
foo.h中:
namespace fooSpace
{
foo();
}
我在Foo.cpp中包含了这个:
using fooSpace;
foo ()
{
// definition of foo
}
我还在我的Main.cpp中包含了Foo.h,我尝试使用该函数:
using fooSpace;
// Other stuff
fooSpace::foo();
为什么我会收到链接器错误,有什么明显的明显吗?或者它不一定在这里,它可能是我做过的其他事情吗?
非常感谢您的回复!
答案 0 :(得分:1)
定义必须位于命名空间
内namespace fooSpace {
<return_type> foo() {
// definition
}
}
或有资格表明它是命名空间中的函数,而不是同名的另一个函数
<return_type> fooSpace::foo() {
// definition
}
您改为在全局命名空间中声明并定义具有相同名称的新函数,并保留fooSpace::foo
未定义。
答案 1 :(得分:1)
在您的代码中,
using fooSpace; // this brings the declaration fooSpace::foo() into the current scope
foo () // this is a new function in the current scope, which is ::foo()
{
// definition of foo
}
所以你的函数fooSpace::foo()
还没有定义。