Я хочу написать небольшой класс 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()
Эта ошибка может быть исправлена путем оборачивания класса и функция в одном пространстве имен. Но я не понимаю, зачем мне пространство имен. Существует одна декларация getInstance() и одна реализация, нет?
Если вы указали этот код из нескольких единиц перевода, то существует несколько реализаций 'getInstance()' и 'interInstance' –
. Добавляя, вы всегда должны обертывать свои заголовки в защиту заголовка. – chris
Используете ли вы анонимное пространство имен, то есть 'namespace {/ * stuff * /}'? –