私はシングルトンパターンでクラスを実装し、そのクラスのインスタンスにプライベートメンバ関数を呼び出したいと思っています。クラスの静的インスタンスはプライベートメンバ関数を呼び出すことができません。 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'
を取得します。
申し訳ありませんが、私はここで間違ったコードを書いています。上記補正されたコードが実際のコードである
#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;
}
:以下に示すようgetInstance()
は、公開しなければなりません。
古いコンパイラを使用している可能性があります。いいえ、エラーは 'Test :: getInstance()'からです。これはプライベートメンバー関数です。したがって、クラススコープ外ではアクセスできません。 – WhiZTiM
楽しい事実:シングルトンは、その作者によって*タールされ、羽ばたく*。 –
引用した実際のエラーメッセージが出たときにコンパイルしたコードですか? –