我在MyClass.h文件中有一个类:
// MyClass.h
#ifndef __MY_CLASS_H__
#define __MY_CLASS_H__
#include <string>
class MyClass
{
static const std::string MyStaticConstString; // I cannot initialize it here, because it's not an integral type.
};
// OK, let's define/initialize it out side of the class declaration
// static
const std::string MyClass::MyStaticConstString = "Value of MyStaticConstString";
#endif
问题是,如果此文件包含多次,编译器会抱怨“多个定义”。
所以我必须将MyStaticConstString
的定义移到MyClass.cpp文件中。但是,如果MyClass
是库的一部分,并且我希望我的用户在MyClass.h文件中看到const静态值,这是有意义的,因为它是一个静态const值。
我该怎么办?我希望我能说清楚。
感谢。
彼得
答案 0 :(得分:1)
不,出于同样的原因,你不能将全局变量放在头文件中,不符合const限定条件。记录你的常量(如果它是一个常数,那么为什么用户应该关心它的值呢?)。
另外,不要在标识符前加上下划线(__MY_CLASS_H__
),它们是为实现内容保留的。
答案 1 :(得分:1)
两个问题:
像你或我这样的人不能创建像__MY_CLASS_H__这样的名字。
std :: strings不是整数类型
答案 2 :(得分:1)
没有
你应该怎么做?
在标题中执行此操作:
//myclass.h
// MyClass.h
#ifndef MY_CLASS_H
#define MY_CLASS_H
class MyClass
{
static const std::string MyStaticConstString; // I cannot initialize it here, because it's not an integral type.
};
extern std::string some_global_variable; //declare this with extern keyword
#endif //MY_CLASS_H
在源文件中执行此操作:
//myclass.cpp
#include "myclass.h"
const std::string MyClass::MyStaticConstString = "Value of MyStaticConstString";
std::string some_global_variable = "initialization";
请记住,以下划线为前缀的名称是保留的,请勿使用它们。使用MY_CLASS_H
。