命名空间的错误而宣告它在全球范围内(Namespace error while declare it

2019-09-20 07:38发布

我有3个文件Test.h,Test.cpp的和main.cpp中

Test.h

#ifndef Test_H
#define Test_H
 namespace v
{
    int g = 9;;
    }
class namespce
{
public:
    namespce(void);
public:
    ~namespce(void);
};
#endif

TEST.CPP

   #include "Test.h"


namespce::namespce(void)
{
}

namespce::~namespce(void)
{
}

Main.cpp的

#include <iostream>
using namespace std;
#include "Test.h"
//#include "namespce.h"


int main ()
{

    return 0;

}

建设期间,它提供了以下错误..

1>namespce.obj : error LNK2005: "int v::g" (?g@v@@3HA) already defined in main.obj
1>C:\Users\E543925\Documents\Visual Studio 2005\Projects\viku\Debug\viku.exe : fatal error LNK1169: one or more multiply defined symbols found

好心帮尽快..

Answer 1:

你有两个选择:

静态的:

namespace v
{
    static int g = 9; //different copy of g per translation unit
}

外部

namespace v
{
    extern int g; //share g between units
}

// add initialization to .cpp:
namespace v { int g = 9; }


Answer 2:

这是一个定义:

namespace v
{
    int g = 9;
}

即获取复制main.objtest.obj#include "Test.h"在每一个的.cpp文件。 在包括防护件#ifndef Test_H不仅防止多次包含在一个单一的翻译单元。

改成:

namespace v
{
    extern int g; // This is now a declaration and extern tells the compiler
                  // that there is definition for g somewhere else.
}

并添加以下到Test.cpp

namespace v
{
    int g = 9; // This is now the ONLY definition of 'g', in test.obj.
}


Answer 3:

你想要的只是一个实例g受到大家的访问? 在报头中,使用

extern int g; // declaration

在Test.cpp的,放

int v::g = 9; //definition


文章来源: Namespace error while declare it in global scope