变量未定义在命名空间中

时间:2018-01-14 19:53:24

标签: c++ cmake

我有以下文件集。

// HeaderOne.h
namespace foo
{
    namespace bar
    {
        class A
        {
            .
            .
            .
        };
    }
}

// HeaderTwo.h
namespace foo
{
    namespace bar
    {
        std::string const baz;
    }
}

// HeaderTwo.cpp
#include "HeaderTwo.h"

using namespace foo::bar;

std::string const baz = "baz";

// HeaderOne.cpp
#include <iostream>
#include "HeaderOne.h"
#include "HeaderTwo.h"

using namespace foo::bar;

A::A()
{
    std::cout << baz << std::endl;
}

我使用CMake作为我的构建系统,当我构建时,我在baz上收到未声明的标识符错误。我认为这应该可行,但我所做的任何更改似乎仍然会在文件之间分割的定义之间产生错误。任何想法可能会出错?

1 个答案:

答案 0 :(得分:0)

定义内容时,请使用此表单。

namespace name{
     type definedname= value;
}

或者

     type name::definedname= value;

否则,编译器如何知道应该将definename放在哪个命名空间中。它将没有命名空间。