Неопределенные символы при включении. Сломанный компилятор / IDE?

Я тестирую CLion IDE и пытаюсь написать минимальную программу на C ++. Вот мой код:

в main.cpp:

#include "classings.h"
int main() {
classings s;
s.doSomething();
return 0;
}

в classings.h:

class classings {
public:
void doSomething();
};

в classings.cpp:

#include <string>
#include <iostream>
#include "classings.h"
void classings::doSomething() {
std::cout << "hei" << std::endl;
}

Я понятия не имею, почему это дает мне эту ошибку:

Undefined symbols for architecture x86_64:
"classings::doSomething()", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я на OSX 10.10.

0

Решение

Я думаю, что ваши исходные файлы classings.h а также classings.cpp не включены в ваш CMakeLists.txt,

Если вы откроете CMakeLists.txt, это должно выглядеть примерно так:

незавершенный CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(untitled)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp) # your other source files aren't listed
add_executable(my-program ${SOURCE_FILES})

Вы можете решить проблему, включив новые исходные файлы

Правильный CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(untitled)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(SOURCE_FILES main.cpp classings.hpp classings.cpp) # manually listing all sources
add_executable(my-program ${SOURCE_FILES})

К вашему сведению, вы можете избавить себя от хлопот редактирования CMakeLists.txt каждый раз, когда вы добавляете / удаляете новый исходный файл, используя файл() или же aux_source_directory () команда. Вот пример:

set(SOURCE_DIRECTORY "src")
file(GLOB_RECURSE SOURCE_FILES "${SOURCE_DIRECTORY}/*.c"   "${SOURCE_DIRECTORY}/*.h""${SOURCE_DIRECTORY}/*.cc"  "${SOURCE_DIRECTORY}/*.hh""${SOURCE_DIRECTORY}/*.cpp" "${SOURCE_DIRECTORY}/*.hpp""${SOURCE_DIRECTORY}/*.cxx" "${SOURCE_DIRECTORY}/*.hxx")
add_executable(my-program ${SOURCE_FILES})

Или же

aux_source_directory("src" SOURCE_FILES)
add_executable(my-program ${SOURCE_FILES})
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector