Работает в онлайн-компиляторе, но не работает в VS

Рейтинг: 0Ответов: 0Опубликовано: 22.01.2023

Распределяю код по файлам, и не могу запустить код. Попробовал через GDB, и там код работает, но если я пытаюсь запустить его в VS, то компилятор выдает ошибку:

error LNK2019: ссылка на неразрешенный внешний символ "public: __cdecl Wall::Wall(double,double)" (??0Wall@@QEAA@NN@Z) в функции main.
error LNK2019: ссылка на неразрешенный внешний символ "public: int __cdecl Carpenter::CalcShelves(class Wall)const " (?CalcShelves@Carpenter@@QEBAHVWall@@@Z) в функции main.

Вот сам код:

5-4 y4 z2.cpp

#include <iostream>
#include "wall.h"
#include "carpenter.h"

using namespace std;

int main()
{
    Carpenter jack;
    Wall wall{2.2, 4.4};
    // jack.CalcShelves(wall) == 4 
    cout << jack.CalcShelves(wall) << endl;
}

wall.h

class Wall {
public:
    enum class Color { BLUE, GREEN, RED, WHITE, YELLOW };

    Wall(double width, double height);

    double GetHeight() const;
    double GetWidth() const;
    void SetColor(Color color);
    Color GetColor() const;

private:
    double width_;
    double height_;
    Color color_;
};

wall.cpp

#include "wall.h"

Wall::Wall(double width, double height)
    : width_(width)
    , height_(height)
    , color_(Color::WHITE) {
}

double Wall::GetHeight() const {
    return height_;
}
double Wall::GetWidth() const {
    return width_;
}
void Wall::SetColor(Color color) {
    color_ = color;
}
Wall::Color Wall::GetColor() const {
    return color_;
}

carpenter.h

class Wall;

class Carpenter {
public:
    int CalcShelves(Wall w) const;
private:

};

carpenter.cpp

#include "carpenter.h"
#include "wall.h"
#include "square_calculations.h"

int Carpenter::CalcShelves(Wall wall) const {
    double square = CalcSquare(wall.GetWidth(), wall.GetHeight());
    return static_cast<int>(square / 2);
}

square_calculations.h

double CalcSquare(double width, double height);

square_calculation.cpp

double CalcSquare(double height, double width) {
    return width * height;
}

Как исправить эту проблему?

Ответы

Ответов пока нет.