Как создать псевдоним для класса из внутреннего пространства имен? [дубликат] ⇐ C++
-
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. Но я не могу понять, как это исправить.
В моем приложении есть родительский класс:
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. Но я не могу понять, как это исправить.
Мобильная версия