我的目标是实现一个可以从任何地方访问的类,提供键值对;
class SharedResources
{
public:
static QMap <QString,QVariant> *preferences;
};
//initialization
SharedResources.preferences = new QMap<QString,QVariant>();
//store data
SharedResources.preferences->insert("some_data",some_data);
//access data
some_data = SharedResources.preferences->value("some_data");
但此代码无法编译。
第一个错误(每次使用时都有类似的错误):
/file:line: error: expected unqualified-id before '.' token
SharedResources.preferences = new QMap<QString,QVariant>();
^
我肯定打破了一些c ++规则,但那些是什么?
更新:使用::错误是:
/file:line: error: undefined reference to `SharedResources::preferences'
答案 0 :(得分:2)
正如我在评论中已经指出的那样,静态成员可以通过::
访问,而不是通过.
访问
我想原因是.
是一个需要一个对象的运算符,而静态成员是在没有对象的情况下访问的。
答案 1 :(得分:2)
在这种情况下,最好使用静态而非动态分配的内存(即没有new
)。
您的问题是您必须声明并定义您的静态字段。在头文件中你只声明它,它应该在cpp
文件的某个地方定义,如:
// this defines the variable, with default ctor (w/out parameters)
QMap<QString,QVariant> SharedResources::preferences;
当然,您必须将相应的目标文件链接到其他模块(除了使用带声明的头文件)。