Конструктор C ++ не определен - PullRequest
1 голос
/ 11 марта 2019

Я работаю над проектом C ++, я использую CMake для создания моего файла.Причина сбоя моей сборки

неопределенная ссылка на `Software :: Software () '

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

Архитектура файлов:

enter image description here

CMake:

# 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})

Software.h:

#include <string>
class Software{
    private : 
        std::string name;

    public :
        Software();
}

Software.cpp:

#include "Software.h"

Software::Software() {
    this->name = "defaultName";
}

SoftwaresConfigurations.h (кто вызывает конструктор программного обеспечения):

#include "Software.h"

class SoftwaresConfigurations {
    public:
        SoftwaresConfigurations();
}

SoftwaresConfiguration.cpp:

#include "SoftwaresConfigurations.h"

SoftwaresConfigurations::SoftwaresConfigurations(){
    Software software = Software();
}

1 Ответ

5 голосов
/ 11 марта 2019

Вы попали в ловушку, которая FILE(GLOB ...). Повторное выполнение CMake должно исправить это, но вам, вероятно, следует отказаться от использования GLOB для сбора исходных файлов. Например, вы можете перечислить их явно следующим образом:

set(SOURCES src/main.cpp src/Softwares.cpp src/SoftwaresConfigurations.cpp)

Я объясню, что произошло ниже.

Официальная документация гласит:

Мы не рекомендуем использовать GLOB для сбора списка исходных файлов из вашего исходного дерева. Если файл CMakeLists.txt не изменяется при добавлении или удалении источника, сгенерированная система сборки не может знать, когда попросить CMake сгенерировать заново.

Так что, вероятно, произошло то, что вы создали проект только с одним исходным файлом. CMake запустил GLOB во время конфигурации и нашел только один файл .cpp. Затем вы добавили два файла (о которых CMake не знал) и добавили #include к вашему SoftwaresConfiguration.cpp. Это вызывает восстановление. Однако, поскольку CMake не знает о Softwares.cpp, он не создает этот файл, и компоновщик создает символ без ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...