2

私のC++は少し錆びています。iにアクセスしているときにmain()に「クラスまたは名前空間ではない」コンパイル時エラーが表示される理由を誰かが理解できますか?

#include <iostream>

using namespace std;

class Singleton2 {
    Singleton2(){
        i = 0;
    }
public:
    int i;

    friend Singleton2 & singleton2();
};

Singleton2 & singleton2(){
    static Singleton2 ms;

    return ms;
}

int main() {
    Singleton2 ms = singleton2();
    int i = ms::i;              // error: `ms' is not a class or namespace
    cout << i << endl;
}
4

1 に答える 1

2

スコープ解決演算子ではなく、ドット.演算子を使用して非静的メンバーにアクセスします::

int i = ms.i;

以下の割り当てに注意してください

Singleton2 ms = singleton2();

シングルトンのコピーを作成します。あなたsingleton2()は参照を返すので、おそらくあなたもms参照を作成する必要があります:

Singleton2 &ms = singleton2();
于 2012-09-12T10:17:35.370 に答える