提问者:小点点

CLion-无法解决类中对构造函数的未定义引用


我已经看过这个答案了,但我似乎找不到适合我的情况的解决办法。

我刚开始用C++和Clion工作。 我做了一个基本的测试项目,它包括一个头文件和main函数,然后从包含的类中执行一个方法--所有的工作都很好,CLion编译器是mingw。

现在,我需要做的真正项目集成了一个供应商用C++编写的SDK。 他们也有例子。 每次我运行它们时,CLion都会破坏构建并抱怨未定义的引用。。。 include文件路径都是正确的,Cmakelist.txt如下所示:

project(test_2)

include_directories("../libraries/bin/headers/")

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_EXE_LINKER_FLAGS "")

set(PROJECT_HEADERS

        "../libraries/bin/headers/SDK.h"
        "test.h"
        )
set(PROJECT_SOURCES
        main.cpp
        )

add_executable(test_2 ${PROJECT_SOURCES} ${PROJECT_HEADERS})

列出的第一个未定义引用是SDK类的构造函数,它简单地写成:

class SDK{
   ...
   SDK();
   ...
}

有什么建议吗?问题出在哪里?

因为目前的情况,我无法联系到他们那边的任何人,所以我想我在这里问一下。。。

谢啦!


共2个答案

匿名用户

我对CMake并不熟练--但是如果使用外部SDK,您可能还必须使用类似target_link_libraries()/target_link_directories()的东西链接库/目录。 在我看来,你只是简单地告诉编译器“嘿,这是我的SDK头,做点什么”,但是编译器不知道这个SDK的符号在哪里定义。 这里对两者之间的基本区别进行了一点解释,但我建议直接查看CMake文档。

C,M,P,I,I,G,W,I,TH,C,M,D,K,E,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D

匿名用户

我不知道您使用的库是如何设计的,但是如果头文件中没有构造函数的定义,那么它显然不是仅头文件。 所以你要么链接到那个库,要么把它的实现文件(如果你有的话)添加到你的项目中,这样linker就得到了你承诺的东西。 我建议查看target_link_libraries,看看如何在CMake中链接(不过还有更多的方法)。

未定义引用错误通常意味着链接器没有找到在标头中通告的内容。