c+中的名称空间+; 如何在C++中使用命名空间,在不同的头文件中可以访问这些名称空间。假设我有以下内容: // namespaces #include <iostream> using namespace std; namespace first { int var = 5; } namespace second { double var = 3.1416; } int main () { cout << first::var << endl; cout << second::var << endl; return 0; }

c+中的名称空间+; 如何在C++中使用命名空间,在不同的头文件中可以访问这些名称空间。假设我有以下内容: // namespaces #include <iostream> using namespace std; namespace first { int var = 5; } namespace second { double var = 3.1416; } int main () { cout << first::var << endl; cout << second::var << endl; return 0; },c++,namespaces,C++,Namespaces,这样做可能吗?当我尝试时,我得到一个错误,表明我的命名空间没有定义。如果我将using namespace放在.h或.cpp中的第一个位置,它表示没有名为first的名称空间…除了将名称空间放在头中之外,还需要使变量extern: //header.h namespace first { extern int var; } //implementation.cpp #include "header.h" namespace first { int var = 5; } 如果变量不

这样做可能吗?当我尝试时,我得到一个错误,表明我的命名空间没有定义。如果我将using namespace放在.h或.cpp中的第一个位置,它表示没有名为first的名称空间…

除了将名称空间放在头中之外,还需要使变量extern:

//header.h
namespace first
{
  extern int var;
}


//implementation.cpp
#include "header.h"
namespace first
{
   int var = 5;
}
如果变量不是
extern
,则在包含头的任何位置都将生成一个符号,并且您将得到链接器错误

如果不需要额外的头,可以在要使用它的同一命名空间中将变量声明为
extern

//server.cpp
namespace first
{
   extern int var;
}
server::server()
{
    first::var = 3;
}

注意一些答案可能会要求将变量
设置为静态
。这是错误的,尽管它会编译,因为这样变量就不会充当全局变量。将为每个翻译单元创建其副本。

除了在标题中包含名称空间外,还需要将变量extern设置为:

//header.h
namespace first
{
  extern int var;
}


//implementation.cpp
#include "header.h"
namespace first
{
   int var = 5;
}
如果变量不是
extern
,则在包含头的任何位置都将生成一个符号,并且您将得到链接器错误

如果不需要额外的头,可以在要使用它的同一命名空间中将变量声明为
extern

//server.cpp
namespace first
{
   extern int var;
}
server::server()
{
    first::var = 3;
}

注意一些答案可能会要求将变量
设置为静态
。这是错误的,尽管它会编译,因为这样变量就不会充当全局变量。将为每个翻译单元创建一个名称空间副本。

您可能应该将这些名称空间放在头文件中,并将其包含在您需要的位置。不要这样做!为什么在一天后你要彻底改变这个问题?问一个新问题。你可能应该将这些名称空间放在头文件中,并在需要的地方包含它。不要这样做!为什么在一天后你要彻底改变这个问题?问一个新问题。因为我讨厌这样做,所以我从来没有学过为每个翻译单元制作一份静态副本。谢谢你的信息!还有,“我们都会错过C++的拐角部分,不要对人太苛刻,嗯?”我知道,Cracyyddie我在编辑之前就反映过了。虽然在实现中,CPP:我会做<代码> int::var=5;<代码>@LuchianGrigore我编辑了这个问题…我现在得到了未定义的引用错误…@user1185853,我编辑了回去。问一个新问题,因为这是一个不同的问题。因为我讨厌这样做,我从来没有学过为每个翻译单元制作一个静态副本。谢谢你的信息!还有,“我们都会错过C++的拐角部分,不要对人太苛刻,嗯?”我知道,Cracyyddie我在编辑之前就反映过了。虽然在实现中,CPP:我会做<代码> int::var=5;<代码>@LuchianGrigore我编辑了这个问题…我现在得到了未定义的引用错误…@user1185853,我编辑了回去。问一个新问题,因为这是一个不同的问题。