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

时间:2011-09-27 14:59:56

标签: c++ class definition

  

可能重复:
  C++ static constant string (class member)
  static const C++ class member initialized gives a duplicate symbol error when linking

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

我正在为我的类定义我的头文件,并希望为url创建一个静态常量。我正在尝试这样做:

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

const std::string MainController::SOME_URL = "www.google.com";

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

我该如何做到这一点?

4 个答案:

答案 0 :(得分:13)

移动

const std::string MainController::SOME_URL = "www.google.com";

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

答案 1 :(得分:10)

你需要把这行

const std::string MainController::SOME_URL = "www.google.com";

在cpp文件中,而不是标题,因为one-definition rule。而且你无法在类中直接初始化它的事实是因为std::string不是整数类型(如int)。

或者,根据您的使用情况,您可能会考虑不使用静态成员,而是使用匿名命名空间。 See this post for pro/cons

答案 2 :(得分:3)

在头文件中定义类:

//file.h
class MainController{
private:
    static const std::string SOME_URL;
}

然后,在源文件中:

//file.cpp
 #include "file.h"

const std::string MainController::SOME_URL = "www.google.com";

答案 3 :(得分:2)

您应该将const std::string MainController::SOME_URL = "www.google.com";定义放入单个源文件中,而不是标题中。