共享首选项实现

时间:2015-07-08 12:34:29

标签: c++ qt

我的目标是实现一个可以从任何地方访问的类,提供键值对;

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'

2 个答案:

答案 0 :(得分:2)

正如我在评论中已经指出的那样,静态成员可以通过::访问,而不是通过.访问

我想原因是.是一个需要一个对象的运算符,而静态成员是在没有对象的情况下访问的。

答案 1 :(得分:2)

在这种情况下,最好使用静态而非动态分配的内存(即没有new)。

您的问题是您必须声明并定义您的静态字段。在头文件中你只声明它,它应该在cpp文件的某个地方定义,如:

// this defines the variable, with default ctor (w/out parameters)
QMap<QString,QVariant> SharedResources::preferences; 

当然,您必须将相应的目标文件链接到其他模块(除了使用带声明的头文件)。