Я хочу реализовать класс с одноэлементным шаблоном и иметь экземпляр класса, вызывающего функцию частного участника.статический экземпляр класса не может вызвать функцию частного участника. C++
#include <iostream>
using namespace std;
class Test {
private:
Test(){}
static Test* getInstance()
{
static Test obj;
return &obj;
}
public:
void print()
{
cout<<"test function"<<endl;
}
};
int main(int argc, const char * argv[]) {
Test::getInstance()->print(); //error!
return 0;
}
и я получаю сообщение об ошибке Сформировать сообщение Xcode
'print' is a private member of 'Test'
Я думаю, что статический экземпляр может также вызвать функцию частного члена.
Извините, я написал здесь неправильный код. getInstance()
должен быть открытым, как показано ниже:
#include <iostream>
using namespace std;
class Test {
private:
Test(){}
void print()
{
cout<<"test function"<<endl;
}
public:
static Test* getInstance()
{
static Test obj;
return &obj;
}
};
int main(int argc, const char * argv[]) {
Test::getInstance()->print();
return 0;
}
выше исправленный код является фактическим кодом.
Я подозреваю, что вы используете старый компилятор. Нет, ошибка от 'Test :: getInstance()', которая является частной функцией-членом. И, следовательно, невозможно получить доступ за пределами класса. – WhiZTiM
Забавный факт: синглтон был * смолистым и пернатым * его авторами. –
Это код, который вы скомпилировали, когда вы получили фактическое сообщение об ошибке, которое вы указали? –