1

私はシングルトンクラスを持っています。構造体メンバーに値を代入したいと思います。しかし、コンパイラはエラーをスローしますA nonstatic member reference must be relative to a specific object。同じ問題を解決する方法を教えてください。

class abc{

    static abc* m_selfInst;
public:

    struct abcd{
        int a;
    }abcd;

abc* GetInstance();
};

abc* abc::m_selfInst = NULL;

abc* abc::GetInstance()
{
    if(m_selfInst == NULL)
    {
        m_selfInst = new abc();
    }
    return m_selfInst;
}
int main()
{
    abc *ab = abc::GetInstance(); //Error Occurs here
    abc::abcd.a = 5; //Error occurs here too
    //cout <<ab.abcd.a << "\n";

    return 0;
}
4

2 に答える 2

4
abc *ab = abc::GetInstance();

GetInstance()メソッドを宣言する必要があります。staticそうしないと、 のインスタンスでのみ呼び出すことができますabc

abc::abcd.a = 5;

ここでabc::abcdは、タイプです。おそらく、指しているabcd インスタンスabc インスタンスを参照する必要がありabます。

ab->abcd.a = 5;

インスタンスと型に同じ名前を付けることは本当に控えるべきです (struct abcdと インスタンス のようにabcd)。

于 2013-04-22T06:55:02.443 に答える
2

GetInstance機能する必要がありstaticます。

static abc* GetInstance();

へのアクセスaは type の変数を使用する必要がありますabc

ab->abcd.a

名前付きタイプの構造体abcdとオブジェクトは本当に混乱します。多分そうあるべきabcdabcd

struct {
    int a;
} abcd;
于 2013-04-22T06:54:43.503 に答える