#c #makefile #g #fltk
#c #сделать файл #g #fltk
Вопрос:
Я новичок в программировании ООП на C и makefile. Для проекта я пытаюсь переделать CandyCrush с помощью FLTK.
Моя структура проекта такова :
- графический интерфейс/:
- MainWindow.cpp /.h
- Basicshape.cpp /.h
- Functionable.cpp /.h
- логика/:
- Matrix.cpp /.h
- Cell.cpp /.h
- Item.cpp /.h
- Position.cpp /.h
- main.cpp
- сделать файл
Вот содержимое моего файла makefile :
FLAGS=--std='c 20' -Wall -Wextra -Wpedantic -lfltk all:CandyCrush CandyCrush: main.o Matrice.o Cell.o Item.o Position.o Mainwindow.o BasicShape.o Functionable.o g -o CandyCrush main.o Matrice.o Cell.o Item.o Position.o Mainwindow.o BasicShape.o Functionable.o -lfltk Cell.o: logic/Cell.h logic/Cell.cpp g $(FLAGS) -c logic/Cell.cpp -o Cell.o Item.o: logic/Item.h logic/Item.cpp g $(FLAGS) -c logic/Item.cpp -o Item.o Position.o: logic/Position.h logic/Position.cpp g $(FLAGS) -c logic/Position.cpp -o Position.o Matrice.o: logic/Matrice.h logic/Matrice.cpp g $(FLAGS) -c logic/Matrice.cpp -o Matrice.o BasicShape.o: gui/BasicShapes.h gui/BasicShapes.cpp g $(FLAGS) -c gui/BasicShapes.cpp -o BasicShape.o Functionable.o: gui/Functionable.h gui/Functionable.cpp g $(FLAGS) -c gui/Functionable.cpp -o Functionable.o Mainwindow.o: gui/Mainwindow.h gui/Mainwindow.cpp g $(FLAGS) -c gui/Mainwindow.cpp -o Mainwindow.o main.o: main.cpp g $(FLAGS) -c main.cpp -o main.o
Я знаю, что могу имитировать это с помощью %.o
%.cpp
ect. Но для целей списания я предпочитаю устанавливать свой файл make таким образом.
Вот мое сообщение об ошибке после использования make
(оно компилирует main.o -gt; функционально.o):
g -o CandyCrush main.o Matrice.o Cell.o Item.o Position.o Mainwindow.o BasicShape.o Functionable.o -lfltk /usr/bin/ld: main.o: in function `MainWindow::MainWindow()': main.cpp:(.text._ZN10MainWindowC2Ev[_ZN10MainWindowC5Ev] 0xdc): undefined reference to `Rectangle::~Rectangle()' /usr/bin/ld: main.o: in function `MainWindow::~MainWindow()': main.cpp:(.text._ZN10MainWindowD2Ev[_ZN10MainWindowD5Ev] 0x28): undefined reference to `Rectangle::~Rectangle()' collect2: error: ld returned 1 exit status make: *** [makefile:6: CandyCrush] Error 1 rm *.o
У меня эта ошибка после попытки наследовать метод draw() в прямоугольнике и круге из Sketchable:
class Sketchable { public: virtual void draw()const=0; }; struct Point{ int x,y; }; class BasicShape{ protected: Point center; Fl_Color frameColor=FL_BLACK, fillColor=FL_WHITE; public: ~BasicShape(); }; class Rectangle: public virtual BasicShape, public virtual Sketchable{ int w,h; public: Rectangle(Point center, int width, int height, Fl_Color frameColor=FL_BLACK, Fl_Color fillColor=FL_WHITE); void draw() const override ~Rectangle(); }; class Circle:public virtual BasicShape, public virtual Sketchable{ int r,w,h; public: Circle(Point center, int rayon, Fl_Color frameColor=FL_BLACK, Fl_Color=FL_WHITE); void draw() const override; ~Circle(); };
Заранее спасибо за вашу помощь.
Комментарии:
1. Вы объявляете
Rectangle
деструктор~Rectangle
, но где вы его определяете (реализуете)? Если вы нигде его не реализуете, то, возможно, он не нужен, и вам следует удалить объявление?2. Ни один из этих классов, похоже, вообще не нуждается в деструкторе.
3. Деструктор прямоугольника может быть виртуальным или чисто виртуальным.