如何在C++中定义字符串常量?

Tho*_*hom 18 c++ class definition

可能重复:
C++静态常量字符串(类成员)
static const C++类成员初始化在链接时给出重复的符号错误

我使用C++的经验预先添加了字符串类,所以我在某些方面重新开始.

我正在为我的类定义我的头文件,并希望为url创建一个静态常量.我这样做的方法如下:

#include <string>
class MainController{
private:
    static const std::string SOME_URL;
}

const std::string MainController::SOME_URL = "www.google.com";
Run Code Online (Sandbox Code Playgroud)

但这在链接期间给了我一个重复的定义.

我怎么能做到这一点?

Dav*_*hme 14

移动

const std::string MainController::SOME_URL = "www.google.com";
Run Code Online (Sandbox Code Playgroud)

到一个cpp文件.如果你在标题中有它,那么包含它的每个.cpp都会有一个副本,你会在链接期间得到重复的符号错误.

  • @Thom,问题没有用标题保护解决,因为每个翻译单元(cpp文件)都包含标题,所以每个翻译单元最后都有一个同名字符串的'副本',结果就是每个翻译单元编译正确.然而,当链接多个翻译单元具有相同的符号(字符串)并且由于符号链接而引起链接错误时. (3认同)
  • 我想我不太明白的是我的头球后卫中有这些。这解决了问题,我只是不明白为什么...... (2认同)

JRL*_*JRL 11

你需要放线

const std::string MainController::SOME_URL = "www.google.com";
Run Code Online (Sandbox Code Playgroud)

因为一个定义规则,在cpp文件中,而不是标题.而且你无法在类中直接初始化它的事实是因为std::string它不是一个整数类型(如int).

或者,根据您的使用情况,您可能会考虑不使用静态成员,而是使用匿名命名空间.有关pro/cons的信息,请参阅此帖子.

  • @Nawaz我并不想说你错了; 对于所有意图和目的,今天在C++中,你是对的.我只是在提供一些额外的信息:历史和标准,但没有什么可以改变你所写的内容的影响. (2认同)

归档时间:

查看次数:

44821 次

最近记录:

14 年,2 月 前