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 回答