c++ - C++ 构造函数未定义
问题描述
我从事 C++ 项目,我使用 CMake 来构建我的文件。我的构建失败原因
未定义对“Software::Software()”的引用
,但我没有看到问题。如果您有想法,请不要犹豫,谢谢
文件架构:
制作:
# cmake_minimum_required(VERSION <specify CMake version here>)
project(untitled)
cmake_minimum_required(VERSION 2.8.9)
set(CMAKE_CXX_STANDARD 11)
include_directories(include)
file(GLOB SOURCES "src/*.cpp")
add_executable(untitled ${SOURCES})
软件.h:
#include <string>
class Software{
private :
std::string name;
public :
Software();
}
软件.cpp:
#include "Software.h"
Software::Software() {
this->name = "defaultName";
}
SoftwaresConfigurations.h(调用软件的构造函数):
#include "Software.h"
class SoftwaresConfigurations {
public:
SoftwaresConfigurations();
}
软件配置.cpp:
#include "SoftwaresConfigurations.h"
SoftwaresConfigurations::SoftwaresConfigurations(){
Software software = Software();
}
解决方案
你掉进了那个陷阱FILE(GLOB ...)
。重新运行 CMake 应该可以解决此问题,但您可能应该不再使用 GLOB 来收集源文件。例如,您可以如下明确列出它们:
set(SOURCES src/main.cpp src/Softwares.cpp src/SoftwaresConfigurations.cpp)
我将在下面解释发生了什么。
官方文档是这样说的:
我们不建议使用 GLOB 从源代码树中收集源文件列表。如果添加或删除源时没有 CMakeLists.txt 文件更改,则生成的构建系统无法知道何时要求 CMake 重新生成。
所以可能发生的事情是您只用一个源文件创建了项目。CMakeGLOB
在配置时运行并仅找到一个 .cpp 文件。#include
然后,您添加了两个文件(CMake 不知道)并将SoftwaresConfiguration.cpp
. 这会触发重建。但是,由于 CMake 不知道Softwares.cpp
,它不会构建该文件,并且链接器会生成未引用的符号。
推荐阅读
- python - 来自具有不同长度和键的字典列表的 CSV
- css - 如何反转一个unicode字符串?
- python - 是否有 Python pickle 模块的源代码下载?
- python - 在熊猫数据框中使用索引号突出显示行
- python - 如何在 Heroku Django 上安装 PyMuPDF
- python - NoReverseMatch at /teacher_dashboard/4 未找到“updateorder”的反向。“updateorder”不是有效的视图函数或模式名称
- java - 使用 JAX-RS GenericType 进行 Jackson 对象映射
- python - 如何轻松更改代码的功能?
- python - 在构建 r 包时附加 python 脚本
- angular - 为什么当循环不止一次时,formArray 会变成有角度的 formControl 以形成反应形式?如何停止它或强制返回 formArray?