Как определить строковые константы в С++?

Возможный дубликат:
статическая константная строка С++ (член класса)
static const Элемент класса С++ инициализируется при дублировании символа

Мой опыт работы с С++ предварял добавление строкового класса, поэтому я начинаю в некотором роде.

Я определяю свой заголовочный файл для своего класса и хочу создать статическую константу для URL-адреса. Я пытаюсь сделать это, делая следующее:

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

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

Но это дает мне дублирующее определение во время ссылки.

Как я могу это сделать?

Ответ 1

Переместите

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

в файл cpp. Если у вас есть это в заголовке, то каждый .cpp, который включает его, будет иметь копию, и вы получите дублируемую ошибку символа во время ссылки.

Ответ 2

Вам нужно поместить строку

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

в файле cpp, а не в заголовке, из-за правила одного определения. И тот факт, что вы не можете напрямую инициализировать его в классе, состоит в том, что std::string не является интегральным типом (например, int).

В качестве альтернативы, в зависимости от вашего варианта использования, вы можете не использовать статический член, а вместо этого использовать анонимное пространство имен. Посмотрите это сообщение для pro/cons.

Ответ 3

Вы должны поместить определение const std::string MainController::SOME_URL = "www.google.com"; в один исходный файл, а не в заголовок.

Ответ 4

Определите класс в файле заголовка:

//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";