0

Здраствуйте, при компиляции кода ниже, выходят следующие ошибки:

/tmp/cc0seV1N.o: In function Arc::Arc(Point, int, int, int, int)': Test.cpp:(.text._ZN3ArcC2E5Pointiiii[_ZN3ArcC5E5Pointiiii]+0x37): undefined reference tovtable for Arc' /tmp/cc0seV1N.o: In function Arc::~Arc()': Test.cpp:(.text._ZN3ArcD2Ev[_ZN3ArcD5Ev]+0xf): undefined reference tovtable for Arc' collect2: error: ld returned 1 exit status

Код:

Test.cpp:

#include "Arc.h"
#include "../../../../utility/Graph.h"
#include "../../../../utility/Simple_window.h"

using namespace Graph_lib;

int main()
{
    Simple_window win{Point{100, 100}, 800, 600, "Exercise 1"};
    Arc arc{Point{500, 300}, 50, 20, 30, 80};
    win.attach(arc);
    win.wait_for_button();
}

Arc.h:

   #ifndef MY_ARC_H
    #define MY_ARC_H

    #include "../../../../utility/Graph.h"

    class Arc : public Graph_lib::Ellipse
    {
    public:
        Arc(Point p, int ww, int hh, int a1, int a2) : Graph_lib::Ellipse{p, ww, hh}, a1{a1}, a2{a2} {}

        void draw_lines() const;

        ~Arc() {}

    private:
        int a1;
        int a2;
    };

    #endif //MY_ARC_H

Arc.cpp:

#include "Arc.h"

using namespace Graph_lib;

void Arc::draw_lines() const
{
    if (fill_color().visibility()) {    // fill
        fl_color(fill_color().as_int());
        fl_pie(point(0).x,point(0).y,this->major()+this->major()-1, this->minor()+this->minor()-1,
                a1, a2);
        fl_color(color().as_int()); // reset color
    }

    if (color().visibility()) {
        fl_color(color().as_int());
        fl_arc(point(0).x,point(0).y,this->major()+this->major(),this->minor()+this->minor(), a1, a2);
    }
}

Компилирую на линукс минт. Компилятор g++ 7.4.0. Используется библиотека FLTK и файлы (Graph, Simple_window и все что там внутри подключается) из учебника Страуструпа "Программирование и практика с использованием C++". Найти их можно здесь: http://www.stroustrup.com/Programming/PPP2code/ Команда для компилирования: g++ -I/usr/local/include -I/usr/local/include/FL/images -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -o 'main.out' $1 utility/Graph.cpp utility/GUI.cpp utility/Simple_window.cpp utility/Window.cpp /usr/local/lib/libfltk.a /usr/local/lib/libfltk_images.a /usr/local/lib/libfltk_forms.a /usr/local/lib/libfltk_jpeg.a -lXrender -lXft -lfontconfig -lpthread -ldl -lm -lX11

  • Попробуйте перенести определение деструктора Arc d Arc.cpp – user7860670 Sep 02 '19 at 14:05
  • @VTT, ничего не изменилось – Cheshire Cat Sep 02 '19 at 14:08
  • Так а что именно вы компилируете? Чему равно $1 при вызове команды компиляции? Приведите реальную команду компиляции, так, как она выглядит в момент вызова. Я подозреваю, что у вас Arc.cpp вообще не участвует в компиляции. – AnT stands with Russia Sep 02 '19 at 14:12
  • Компилирую Test.cpp

    D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -o 'main.out' Part_2/Chapter_13/Exercises/Exercise_1/Test.cpp utility/Graph.cpp utility/GUI.cpp utility/Simple_window.cpp utility/Window.cpp /usr/local/lib/libfltk.a /usr/local/lib/libfltk_images.a /usr/local/lib/libfltk_forms.a /usr/local/lib/libfltk_jpeg.a -lXrender -lXft -lfontconfig -lpthread -ldl -lm -lX11

    – Cheshire Cat Sep 02 '19 at 14:19
  • Попробовал компилировать с прямым указанием на Arc.cpp. Ничего не изменилось. – Cheshire Cat Sep 02 '19 at 14:22
  • Ну так разумеется, ничего компилироваться не будет, ибо Arc.cpp никак в компиляции не участвует. Что означает фраза "Попробовал компилировать с Arc.cpp"? Что именно вы делали? При такой команде оба файла - Test.cpp и Arc.cpp - должны поступать на вход одновременно. – AnT stands with Russia Sep 02 '19 at 14:30

0 Answers0