まず、より抽象的な質問です。コンストラクタ/デストラクタまたはそのオブジェクトの複数のコピーが必要ない場合、速度の観点から、クラスの代わりに名前空間を使用することをお勧めしますか?
次に、名前空間を含めて使用しようとすると、「 ccEaV3B0.o:main.cc:(.text+0x10): undefined reference to `board::arbi' 」が表示されます。Windows 7 で Mingw32 を使用しており、次の make コマンドを使用しています: g++ -Wall main.cc board.cc
これは、g++ -c board.cc g++ -Wall main.cc board.o を使用して、個別にコンパイルしたときにも発生します。
(最小限の)ファイルは次のとおりです。
main.cc:
#include <iostream>
using namespace std;
#include "board.h"
int main(){
cout << board::give() << endl;
return 0;
}
ボード.h:
#ifndef BOARD_H
#define BOARD_H
namespace board {
extern int arbi;
extern int give();
}
#endif
board.cc:
#include "board.h"
int board::give(){
return arbi;
}
「int board::arbi = 5;」という初期化を与えることで解決しました。board.ccで
オブジェクトのインスタンスが常に 1 つだけ存在することがわかっている場合でも、何かが明らかにオブジェクトである場合に、なぜクラスを使用する必要があるのかという疑問が残ります。グローバルが必要なように思えますが、名前の衝突を避けるために、グローバルを名前空間に配置します。