1

さまざまなヘッダー ファイルでアクセスできる 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;
}

そして、別のクラスの最初の名前空間からvar変数を使用したい...別の.hおよび.cppファイルで定義および実装されていますか?

//server.h
    #ifndef SERVER_H
    #define SERVER_H
    class server{
       server();
    //blah
    };
    #endif SERVER_H

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

これはこのようにすることは可能ですか?試してみると、名前空間が定義されていないというエラーが表示されます。そして、.h または .cpp で最初に名前空間を使用すると、最初に呼び出される名前空間がないと表示されます...

4

1 に答える 1

10

ヘッダーに名前空間を含めることに加えて、変数 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;
}

一部の回答では、変数を作成する必要があると主張する場合があることに注意staticしてください。これは間違っていますが、コンパイルはできますが、変数はグローバルとして機能しません。翻訳単位ごとにそのコピーが作成されます。

于 2012-05-09T15:28:18.163 に答える