0

Всем доброго! Вынес реализацию класса в отдельный файл wall.h, и пытаюсь вынести методы этого класса в отдельный файл wall.cpp. При попытке запуска программы в VScode я получаю ошибку компоновщика

ld: Undefined symbols:
  Wall::Wall(double, double), referenced from:
      _main in main-a15ca2.o
  Wall::GetSquare() const, referenced from:
      _main in main-a15ca2.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Если методы описываю внутри класса - все работает. Уже всю голову сломал, что я делаю не так? Если в командной строке компилирую - тоже все работает. g++ -W --std=c++17 main.cpp wall.cpp -o main Какие настройки стоит подправить?

//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;
double GetSquare() 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_;
}
double Wall::GetSquare() const {
    return width_ * height_;
}
  • Скорее всего, просто этот файл забыли подключить для линковки (а может, и компиляции)... – Harry Dec 23 '23 at 17:00
  • Когда вы компилируете файл main.cpp, то получаете модуль main.o. Когда вы компилируете файл wall.cpp, то получаете модуль wall.o. Чтобы линкер потом их связал в финальный экзешник без ошибок, ему надо скормить оба этих модуля (плюс все модули подключаемых библиотек). Обычно это происходит автоматически, когда соответствующие cpp-файлы добавляются в проект. У вас, похоже, файл wall.cpp в проект не добавлен. – LShadow77 Dec 23 '23 at 17:13
  • @LShadow77 простите уж за такой вопрос, но каким образом мне нужно этот файл добавить в проект? VScode на маке если честно тот еще фрукт. На протяжении всего обучения только и делаю что с бубном танцую. Сейчас попробовал в XCode, все заработало с первого раза. Значит, я полагаю, дело в настройках? – Stanislav Polischuk Dec 23 '23 at 22:04
  • @Stanislav Polischuk именно! Всё дело в конкретной IDE и её настройках. – LShadow77 Dec 24 '23 at 10:33
  • @LShadow77, попробовал в VScode в терминале скомпилировать путем включения всех файлов вручную g++ -W --std=c++17 main.cpp wall.cpp -o main и все скомпилировалось, все заработало. Но не могу понять, куда думать, чтобы все работало не из командной строки... – Stanislav Polischuk Dec 24 '23 at 11:31
  • @Stanislav Polischuk решение одно - гуглить, читать мануал по ide, в которой работаешь. – LShadow77 Dec 24 '23 at 17:00
  • @LShadow77, проблему решил)) – Stanislav Polischuk Dec 24 '23 at 19:31

0 Answers0