它给了我以下错误和真相......经过数小时的寻找和寻找......我不明白原因。
错误:
➜ build git:(master) ✗ make [ 20%] Building CXX object src/CMakeFiles/App.dir/App.cpp.o [ 40%] Linking CXX static library libApp.a [ 40%] Built target App [ 60% ] Building CXX object src/CMakeFiles/MLog.dir/MLog.cpp.o [80%] Building CXX object src/CMakeFiles/MLog.dir/App.cpp.o [100%] Linking CXX executable MLog CMakeFiles/MLog.dir /App.cpp.o: In function
App::getApp()': App.cpp:(.text+0x50): referencia a
App::app' undefined App.cpp:(.text+0x71): reference toApp::app' sin definir App.cpp:(.text+0x78): referencia a
App::app' undefined collect2: error: ld returned 1 exit status src/CMakeFiles/ MLog.dir /build.make:126:目标“src/MLog”make[2] 的指令失败:* [src/MLog] 错误 1 CMakeFiles/Makefile2:87:目标“src /CMakeFiles/MLog.dir/all”的指令失败制作[1]:* [src/CMakeFiles/MLog.dir/all] 错误 2 Makefile:83: 目标“所有”make 的指令失败:*** [all] 错误 2
CMakeList.txt:
add_library(App App)
ADD_EXECUTABLE(MLog MLog App)
target_link_libraries(MLog App)
应用程序.h:
#ifndef _APP
#define _APP
#include <iostream>
class App
{
public:
void getMensaje();
static App *getApp();
protected:
App();
private:
static App *app;
};
#endif
应用程序.cpp:
#include "App.h"
App::App()
{
}
void App::getMensaje()
{
std::cout << "Esta es la url" << std::endl;
}
App *App::getApp()
{
if(!app)
{
app = new App();
}
return app;
}
MLog.cpp:
#include "App.h"
App *monitor = 0;
int main()
{
App *app = monitor->getApp();
app->getMensaje();
}
您必须实例化静态变量
app
。在 C++ 中,静态变量的实例化分两步进行:
陈述。
你已经在
App.h
.实例化
这是你所缺乏的。在
App.cpp
,在包含之后,做没有put
static
或任何东西,只有它的类型、名称和值。这应该足够了。