一个对象可以访问我的所有应用程序类

时间:2016-11-24 17:05:28

标签: c++

我想在我的所有应用程序类中都可以访问一个对象。所以我虽然:

#include <iostream>

using namespace std;

class MyClass {
public:
    MyClass(){}
    int id(){return -1;}
};

extern const MyClass myClass;

int main() {
    cout << myClass.id();
    return 0;
}

在我需要的任何地方,我都会这样做:

extern const MyClass myClass;

并使用它,例如:

cout << myClass.id();

但是,我错了。这会返回错误:

error: passing 'const MyClass' as 'this' argument of 'int MyClass::id()' discards qualifiers [-fpermissive]

我猜我可以做static MyClass myClass;。所以我将拥有或多或少相同的功能。

什么是最佳/正确的方法?

1 个答案:

答案 0 :(得分:3)

放弃声明和定义中的const

extern /* const */ MyClass myClass;
    // ^^^^^^^^^^^

或制作id()函数const

int id() const {return -1;}
      // ^^^^^
  

我猜我可以做静态MyClass myClass;而不是。所以我将拥有或多或少相同的功能。

static变量仅作为类成员才有意义。

  

什么是最好/最正确的方法?

如果您想确保只有一个类的实例,请更好地使用 Singleton Pattern

class MyClass {
    MyClass(){}
public:
    static Myclass& instance() {
        static MyClass theInstance;
        return theInstance;
    }
    int id(){return -1;}
};

因此,您可以使用以下方式从任何地方访问单个类实例MyClass::instance().id(),并禁止构建其他实例。