График Страуструпа - PullRequest
       1

График Страуструпа

0 голосов
/ 20 августа 2011

Я пробираюсь через "Принципы программирования ..." Страуструпа. Я пытаюсь скомпилировать одну простую оконную программу, но мне не повезло на Linux или Windows.

В конце концов, после нескольких проблем, я пытаюсь включить Graph.h, полученный с его сайта, и ничего больше. Мои ошибки следующие (и я понятия не имею, что теперь делать, так как я предполагаю, что его код верен)

$ g++ window.cpp
In file included from /usr/include/c++/4.5/ext/hash_map:60:0,
                 from /home/nathan/Documents/c++/std_lib_facilities.h:34,
                 from /usr/include/c++/4.5/Window.h:12,
                 from window.cpp:1:
/usr/include/c++/4.5/backward/backward_warning.h:28:2: warning: #warning This file includes at least one deprecated or antiquated header which may be removed without further notice at a future date. Please use a non-deprecated interface with equivalent functionality instead. For a listing of replacement headers and interfaces, consult the file backward_warning.h. To disable this warning use -Wno-deprecated.
In file included from window.cpp:2:0:
/usr/include/c++/4.5/Graph.h: In constructor ‘Graph_lib::Rectangle::Rectangle(Point, Point)’:
/usr/include/c++/4.5/Graph.h:203:43: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘<unresolved overloaded function type>’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h:203:55: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘<unresolved overloaded function type>’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h: In constructor ‘Graph_lib::Circle::Circle(Point, int)’:
/usr/include/c++/4.5/Graph.h:286:26: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h:286:32: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h: In member function ‘Point Graph_lib::Circle::center() const’:
/usr/include/c++/4.5/Graph.h:290:49: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘const int’ to binary ‘operator+’
/usr/include/c++/4.5/Graph.h:290:63: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘const int’ to binary ‘operator+’
/usr/include/c++/4.5/Graph.h: In member function ‘void Graph_lib::Circle::set_radius(int)’:
/usr/include/c++/4.5/Graph.h:292:57: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h:292:71: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’`enter code here`
/usr/include/c++/4.5/Graph.h: In constructor ‘Graph_lib::Ellipse::Ellipse(Point, int, int)’:
/usr/include/c++/4.5/Graph.h:302:33: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h:302:40: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h: In member function ‘Point Graph_lib::Ellipse::center() const’:
/usr/include/c++/4.5/Graph.h:306:49: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘const int’ to binary ‘operator+’
/usr/include/c++/4.5/Graph.h:306:62: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘const int’ to binary ‘operator+’
/usr/include/c++/4.5/Graph.h: In member function ‘Point Graph_lib::Ellipse::focus1() const’:
/usr/include/c++/4.5/Graph.h:309:55: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator+’
/usr/include/c++/4.5/Graph.h:311:66: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator+’
/usr/include/c++/4.5/Graph.h: In member function ‘Point Graph_lib::Ellipse::focus2() const’:
/usr/include/c++/4.5/Graph.h:316:55: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h:318:66: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h: In member function ‘void Graph_lib::Ellipse::set_major(int)’:
/usr/include/c++/4.5/Graph.h:322:56: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h:322:70: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h: In member function ‘void Graph_lib::Ellipse::set_minor(int)’:
/usr/include/c++/4.5/Graph.h:324:56: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h:324:69: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator-’
/usr/include/c++/4.5/Graph.h: In member function ‘void Graph_lib::Image::set_mask(Point, int, int)’:
/usr/include/c++/4.5/Graph.h:372:65: error: cannot resolve overloaded function ‘x’ based on conversion to type ‘int’
/usr/include/c++/4.5/Graph.h:372:74: error: cannot resolve overloaded function ‘y’ based on conversion to type ‘int’

Не знаю, если это вставка всего моего кода, но в любом случае это неправильно. Я посмотрел везде и пытался в течение двух дней. Я теперь разумно расстроен. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 20 августа 2011

Правильно ли указано Point.h (Graph.h зависит от Point.h)? Возможно, какой-то другой файл Point.h будет найден компилятором до того, как будет найден файл из примера "Принципы".

g++ -M Window.cpp

может помочь вам определить это.


Я вытащил весь пример и обнаружил, что мне пришлось исправить две строки в Graph.h, чтобы заставить его скомпилироваться, но они не имели ничего общего со строками, по которым вы получаете ошибки, Point.h или тип Point.

В строках 140-142 из Graph.h мне пришлось изменить:

private:    // prevent copying
    Vector_ref(const Vector&);
    Vector_ref& operator=(const vector&);

до:

private:    // prevent copying
    Vector_ref(const Vector_ref&);
    Vector_ref& operator=(const Vector_ref&);

Полагаю, вы уже сделали это, так как компилятор проходит эти строки без жалоб. После этого исправления Window.cpp прекрасно компилируется (но не связывается, поскольку я не собрал библиотеки, от которых зависит пример).

Я сделал это, используя MinGW 4.5.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...