次のような小さな Singleton クラスを書きたいと思います。
#include <vector>
class Interpreter {
private:
static Interpreter* interInstance;
Interpreter() {}
public:
static Interpreter* getInstance();
~Interpreter() {}
};
Interpreter* Interpreter::interInstance = 0;
Interpreter* Interpreter::getInstance(){
if (!interInstance)
interInstance = new Interpreter();
return interInstance;
}
ただし、これにより次の例外が発生します。
multiple definition of `Interpreter::getInstance()
このエラーは、クラスと関数を 1 つの名前空間にラップすることで修正できます。しかし、名前空間が必要な理由がよくわかりません。getInstance() の 1 つの宣言と 1 つの実装がありますね。