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

One object accessible across all my application classes

本文关键字:都可以 访问 一个对象 应用程序      更新时间:2023-10-16

我希望在所有应用程序类中都可以访问一个对象。所以我:

#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;。因此,我将具有或多或少具有相同的功能。

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

在声明和定义中丢弃const

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

或使id()功能const

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

我想我可以做静态的myclass myclass;而不是。因此,我将具有或多或少具有相同的功能。

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

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

如果要确保仅存在一个类的实例,请更好地使用 singleton模式

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

因此,您可以使用e.g.MyClass::instance().id(),并禁止构造其他实例。