我想在我的所有应用程序类中都可以访问一个对象。所以我虽然:
#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;
。所以我将拥有或多或少相同的功能。
什么是最佳/正确的方法?
答案 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()
,并禁止构建其他实例。