LNK 2019与命名空间错误

时间:2014-10-09 02:00:43

标签: c++ namespaces

我正在尝试用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();

为什么我会收到链接器错误,有什么明显的明显吗?或者它不一定在这里,它可能是我做过的其他事情吗?

非常感谢您的回复!

2 个答案:

答案 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()还没有定义。