C ++重新定义命名空间的变量?

时间:2014-03-22 15:53:04

标签: c++ namespaces extending

我有两个问题。

问题1:有人可以提供如何在命名空间中定义/重新定义变量的示例。我已经提供了你自己的猜测,以便你得到答案。

// namespace.hpp
namespace example
{
    static string version;
    static int x;
}

然后在.cpp中如何重新定义这些变量?

// namespace.cpp
namespace example
{
    version = "0.1"; // ?????
    x = 0; //???
}

问题2:如何将永久类对象从同一个.hpp文件附加到命名空间?像这样:

// namespace.hpp
class Idk
{
    public:
        int doThis();
}

namespace example
{
    Idk idkObject;
}

上面的代码,当多次包含时(来自不同的文件)将替换该对象,这将导致编译错误。再一次,我需要一种永久的方法将对象附加到其头文件的命名空间。

2 个答案:

答案 0 :(得分:1)

问题1:您还需要指定类型

// namespace.cpp
namespace example
{
    string version = "0.1"; // ?????
    int x = 0; //???
}

问题2:不管命名空间如何,都不应在头文件中创建“非静态”对象。你也应该在这里使用static,否则你应该在头文件中使用extern并在cpp文件中定义变量。 {注意它与模板化的类有点不同}

// namespace.hpp
class Idk
{
    public:
        int doThis();
}

namespace example
{
    static Idk idkObject;
}

// namespace.cpp
namespace example
{
    Idk idkObject; // Default constructor
}

答案 1 :(得分:1)

在头文件中写入“ extern”,而不是“ static”,并将数据类型包括在cpp文件的变量定义中。