Visual Studio Code не может найти класс, который я объявил и определил в C ++ - PullRequest
1 голос
/ 20 мая 2019

Я получаю ошибку компоновщика, когда разделяю объявления своих классов и определения функций на их собственные файлы. Код проходит через компилятор, когда весь код находится в одном файле .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 неразрешенная внешность

1 Ответ

0 голосов
/ 20 мая 2019

Попробуйте указать параметры в именах вашего конструктора.например,

Animal(std::string name, int h, int w);

Конструктор сейчас ничего не делает.У вас есть функция в другом файле?

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