可能重复:
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";
但这在链接期间给我一个重复的定义。
我该如何做到这一点?
答案 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";
定义放入单个源文件中,而不是标题中。