Ответ 1
Переместите
const std::string MainController::SOME_URL = "www.google.com";
в файл cpp. Если у вас есть это в заголовке, то каждый .cpp, который включает его, будет иметь копию, и вы получите дублируемую ошибку символа во время ссылки.
Возможный дубликат:
статическая константная строка С++ (член класса)
static const Элемент класса С++ инициализируется при дублировании символа
Мой опыт работы с С++ предварял добавление строкового класса, поэтому я начинаю в некотором роде.
Я определяю свой заголовочный файл для своего класса и хочу создать статическую константу для URL-адреса. Я пытаюсь сделать это, делая следующее:
#include <string>
class MainController{
private:
static const std::string SOME_URL;
}
const std::string MainController::SOME_URL = "www.google.com";
Но это дает мне дублирующее определение во время ссылки.
Как я могу это сделать?
Переместите
const std::string MainController::SOME_URL = "www.google.com";
в файл cpp. Если у вас есть это в заголовке, то каждый .cpp, который включает его, будет иметь копию, и вы получите дублируемую ошибку символа во время ссылки.
Вам нужно поместить строку
const std::string MainController::SOME_URL = "www.google.com";
в файле cpp, а не в заголовке, из-за правила одного определения. И тот факт, что вы не можете напрямую инициализировать его в классе, состоит в том, что std::string
не является интегральным типом (например, int).
В качестве альтернативы, в зависимости от вашего варианта использования, вы можете не использовать статический член, а вместо этого использовать анонимное пространство имен. Посмотрите это сообщение для pro/cons.
Вы должны поместить определение const std::string MainController::SOME_URL = "www.google.com";
в один исходный файл, а не в заголовок.
Определите класс в файле заголовка:
//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";