Я тестирую 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.
Я думаю, что ваши исходные файлы 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})