Я получаю ошибку компоновщика, когда разделяю объявления своих классов и определения функций на их собственные файлы. Код проходит через компилятор, когда весь код находится в одном файле .cpp, но это не то, чего я пытаюсь достичь. Я хочу знать, как я могу разделить мой код на разные файлы.
Вот весь код. Этот код работает полностью нормально.
// main.cpp
#include <string>
#ifndef ANIMAL_H
#define ANIMAL_H
class Animal {
private:
std::string name;
int height;
int weight;
std::string color;
public:
Animal(std::string, int, int);
};
#endif
Animal::Animal(std::string name, int height, int weight) {
this -> name = name;
this -> height = height;
this -> weight = weight;
}
int main() {
Animal dog("Spotty", 20, 50);
return 0;
}
Хотя, поскольку я хочу разделить код, я помещаю объявление класса в его собственный файл, а определения функций в их собственный файл, и я получаю это.
// main.cpp
#include <string>
#include "Animal.hpp"
int main() {
Animal dog("Spotty", 20, 50);
return 0;
}
// Animal.hpp
#include <string>
#ifndef ANIMAL_H
#define ANIMAL_H
class Animal {
private:
std::string name;
int height;
int weight;
std::string color;
public:
Animal(std::string, int, int);
};
#endif
// Animal.cpp
#include "Animal.hpp"
Animal::Animal(std::string name, int height, int weight) {
this -> name = name;
this -> height = height;
this -> weight = weight;
}
Это ошибка, которую я получаю при компиляции второй версии main.cpp.
main.obj: ошибка LNK2019: неразрешенный внешний символ "public: __thiscall Animal::Animal(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,int)
" (?? 0Animal @@ QAE @ V? $ Basic_string @ DU? $ Char_traits @ D @ std @@ V? $ Allocator @ D @ 2 @ @ std @@ HH @ Z) ссылка на функцию _main
main.exe: фатальная ошибка LNK1120: 1 неразрешенная внешность