C++ C++;错误:不是成员或多个定义
我试图使用我在类中定义的静态常量字段。C++ C++;错误:不是成员或多个定义,c++,static,constants,C++,Static,Constants,我试图使用我在类中定义的静态常量字段。 当我这样定义它时: class DisjunctionQuery : public Query { public: DisjunctionQuery (); static const std::string prefix; }; const std::string DisjunctionQuery::prefix = "Or"; 上面写着:“析取查询::前缀”的多重定义 如果我这样更改(删除两行): 它说当我试图在另一个地方调用
当我这样定义它时:
class DisjunctionQuery : public Query
{
public:
DisjunctionQuery ();
static const std::string prefix;
};
const std::string DisjunctionQuery::prefix = "Or";
上面写着:“析取查询::前缀”的多重定义
如果我这样更改(删除两行):
它说当我试图在另一个地方调用它时,“prefix”不是“DisjunctionQuery”的成员
我怎样才能让它工作?
谢谢。您可以将定义移动到单个实现文件中 如果将其保留在标题中,将打破一个定义规则。包含标头的每个文件都将尝试定义
静态
成员,这是错误的
//DisjunctionQuery.h
class DisjunctionQuery : public Query
{
public:
//....
static const std::string prefix;
};
//DisjunctionQuery.cpp
#include "DisjunctionQuery.h"
const std::string DisjunctionQuery::prefix = "Or";
s/将尝试定义/将尝试实现/。该定义在类定义内;多个实现方案是问题所在。@cdhowie不,这只是一个声明。此外,没有数据成员的实现,只有函数的实现。您假设tomer没有添加包含保护。@user1417475包含保护不重要。我说的是包含在多个翻译单元中,所以包含守卫是不相关的。
//DisjunctionQuery.h
class DisjunctionQuery : public Query
{
public:
//....
static const std::string prefix;
};
//DisjunctionQuery.cpp
#include "DisjunctionQuery.h"
const std::string DisjunctionQuery::prefix = "Or";