C++ Переопределение переменных пространства имен?

У меня есть два вопроса.

Вопрос 1: Может ли кто-нибудь привести пример того, как определить/переопределить переменную в пространстве имен. Я предоставил вам свое собственное предположение, чтобы вы могли основывать свой ответ.

// namespace.hpp
namespace example
{
    static string version;
    static int x;
}

А потом в .cpp как мне переопределить эти переменные?

// namespace.cpp
namespace example
{
    version = "0.1"; // ?????
    x = 0; //???
}

Вопрос 2. Как прикрепить постоянный объект класса к пространству имен из того же файла .hpp? Что-то вроде этого:

// namespace.hpp
class Idk
{
    public:
        int doThis();
}

namespace example
{
    Idk idkObject;
}

Приведенный выше код при многократном включении (из разных файлов) заменит объект, что вызовет ошибки компиляции. Еще раз, мне нужен постоянный способ прикрепить объект к пространству имен его заголовочный файл.


person Honor    schedule 22.03.2014    source источник


Ответы (2)


Вместо «static» напишите «extern» в заголовочном файле и включите тип данных в определения переменных в файле cpp.

person Lukas Kalinski    schedule 02.04.2020
comment
также требуются другие изменения - person M.M; 02.04.2020
comment
@M.M Теперь это исправлено. Комментариев было бы достаточно. Не вижу смысла минусовать. - person Lukas Kalinski; 02.04.2020

Вопрос 1: Вам также необходимо указать тип

// namespace.cpp
namespace example
{
    string version = "0.1"; // ?????
    int x = 0; //???
}

Вопрос 2: Вы не должны создавать «нестатический» объект в заголовочном файле независимо от пространства имен. Вы должны просто использовать static и здесь, иначе вы должны использовать extern в файле заголовка и определить переменную внутри файла cpp. {Обратите внимание, что с шаблонными классами все немного по-другому}

// namespace.hpp
class Idk
{
    public:
        int doThis();
}

namespace example
{
    static Idk idkObject;
}

// namespace.cpp
namespace example
{
    Idk idkObject; // Default constructor
}
person Sid    schedule 22.03.2014
comment
Переопределение переменных из вопроса №1 у меня не работает. У меня пространство имен заголовков определяет их как статические переменные. А затем пространство имен .cpp скопировано точно так же, как ваш код. И он продолжает ошибаться, говоря, что это переопределение. - person Honor; 23.03.2014