Как создать псевдоним для класса из внутреннего пространства имен? [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как создать псевдоним для класса из внутреннего пространства имен? [дубликат]

Сообщение Anonymous »


В моем приложении есть родительский класс:

platform/common/baseapp.hpp:

#pragma один раз #include платформа пространства имен::common { класс BaseApp { публика: BaseApp(std::имя строки); виртуальный ~BaseApp() {} виртуальный int run() = 0; частный: std::string m_name; }; } platform/common/baseapp.cxx:

#include "baseapp.hpp" использование платформы пространства имен::common; BaseApp::BaseApp(std::string name): m_name(std::move(имя)) { } И реализация для macOS:

platform/darwin/app.hpp:

#pragma один раз #include #include "platform/common/baseapp.hpp" платформа пространства имен::дарвин { класс DarwinApp: общедоступная платформа::common::BaseApp { публика: DarwinApp(std::string name); переопределение int run(); }; } platform/darwin/app.cxx:

#include "app.hpp" используя платформу пространства имен::darwin; DarwinApp::DarwinApp(std::string name): BaseApp(std::move(имя)) { } int DarwinApp::run() { вернуть 0; } Также псевдоним для вызова из main():

platform/platform.hpp:

#include "flags.hpp" платформа пространства имен { #if TARGET_APPLE_MACOS //Это собственный действительный флаг #include "платформа/дарвин/app.hpp" платформа typedef::darwin::DarwinApp App; #endif } Наконец, я создаю экземпляр в main():

main.cxx:

#include #include "платформа/платформа.hpp" использование платформы пространства имен; интервал основной() { Приложение app(std::string("App")); вернуть приложение.run(); } Однако, когда я пытаюсь собрать свое приложение, оно вылетает с ошибками:

build] ld: Неопределенные символы: [сборка] платформа::платформа::darwin::DarwinApp::run(), ссылка на: [сборка] _main в main.cxx.o [сборка] платформа::platform::darwin::DarwinApp::DarwinApp(std::__1::basic_string) , ссылка из: [сборка] _main в main.cxx.o [сборка] clang: ошибка: команда компоновщика завершилась с ошибкой с кодом завершения 1 (используйте -v, чтобы увидеть вызов) Проблема, очевидно, связана с пространствами имен, есть platform::platform. Но я не могу понять, как это исправить.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»