我希望在所有应用程序类中都可以访问一个对象。所以我:
#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()
,并禁止构造其他实例。