Я пытался реализовать одноэлементный шаблон с предположением о простом использовании частного конструктора, частного экземпляра класса и общедоступного статического метода для возврата экземпляра. Но я обнаружил ошибку в следующем коде в Visual StudioSingleton Design Pattern - Явное объявление конструктора вне класса
// Singleton Invoice
#include <iostream>
using namespace std;
class Singleton {
public:
//Public Static method with return type of Class to access that instance.
static Singleton* getInstance();
private:
//Private Constructor
Singleton();
//Private Static Instance of Class
static Singleton* objSingleton;
};
Singleton* Singleton::objSingleton = NULL;
Singleton* Singleton::getInstance() {
if (objSingleton == NULL) {
//Lazy Instantiation: if the instance is not needed it will never be created
objSingleton = new Singleton();
cout << "Object is created" << endl;
}
else
{
cout << "Object is already created" << endl;
}
return objSingleton;
}
int main() {
Singleton::getInstance();
Singleton::getInstance();
Singleton::getInstance();
return 0;
}
Ошибка, как:
LNK2019 неразрешенный внешний символ "частный: __thiscall Singleton :: Singleton (аннулируются)" (?? 0Singleton @@ AAE @XZ) упоминается в функции "общественность: статический класс Singleton * __cdecl Singleton :: деЫпзЬапс (аннулируется)" (деЫпзЬапсе @ Singleton @@ SAPAV1 @ XZ)
Тогда я решил ошибку, но переписывания конструктора вне класса
?Singleton::Singleton() {
}
Я хотел бы знать причину ошибки и почему конструктор должен быть явно написан вне класса.
Я думаю, это потому, что вы объявили constuctor, но не реализовали его. Кстати, вы случайно участвуете в студенческом колледже Fanshawe? Любопытно – kburlz
Вы создаете указатели на свой метод getInstance и одноэлементный объект. Вы пробовали разыгрывать в основном? – almostcolin
@kburlz Я студент в Университете Бриджпорта: D, Это был пример моего профессора, найденного в Интернете, чтобы научить нас синглтонному шаблону, поэтому, когда я писал его самостоятельно, я столкнулся с проблемой и был любопытен. Думаю, вас можно было бы обучить по тому же примеру: D –