Работает в онлайн-компиляторе, но не работает в VS
Распределяю код по файлам, и не могу запустить код. Попробовал через 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;
}
Как исправить эту проблему?
Источник: Stack Overflow на русском