Fehler Mehrdeutiger Bezeichner

Flavorum

Grünschnabel
Hallo,
ich habe in dem Buch "Einführung in die Programmierung mit C++" mit der Grafikprogrammierung angefangen.
Nachdem ich fltk 1.3.0 installiert habe, und den Beispielcode in Microsoft Visual C++ 2010 express geöffnet habe, meldet es, dass Polygon ein mehrdeutiger Bezeichner ist.

Der Programmcode:
C++:
//
// This is example code from Chapter 12.3 "A first example" of
// "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup
//

#include "Simple_window.h"    // get access to our window library
#include "Graph.h"            // get access to our graphics library facilities

//------------------------------------------------------------------------------

int main()
{
    using namespace Graph_lib;   // our graphics facilities are in Graph_lib

    Point tl(100,100);           // to become top left  corner of window

    Simple_window win(tl,600,400,"Canvas");    // make a simple window

    Polygon poly;                // make a shape (a polygon)

    poly.add(Point(300,200));    // add a point
    poly.add(Point(350,100));    // add another point
    poly.add(Point(400,200));    // add a third point 

    poly.set_color(Color::red);  // adjust properties of poly

    win.attach (poly);           // connect poly to the window

    win.wait_for_button();        // give control to the display engine
}

//------------------------------------------------------------------------------


Der Fehlerbericht:
Code:
1>------ Erstellen gestartet: Projekt: grafik_c++, Konfiguration: Debug Win32 ------
1>  start.cpp
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(45): warning C4305: 'Initialisierung': Verkürzung von 'Graph_lib::Color::Transparency' in 'char'
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(45): warning C4309: 'Initialisierung': Verkürzung eines konstanten Wertes
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(47): warning C4305: 'Initialisierung': Verkürzung von 'Graph_lib::Color::Transparency' in 'char'
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(47): warning C4309: 'Initialisierung': Verkürzung eines konstanten Wertes
1>c:\program files\microsoft visual studio 10.0\vc\include\gui.h(107): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>c:\program files\microsoft visual studio 10.0\vc\include\gui.h(112): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>c:\program files\microsoft visual studio 10.0\vc\include\gui.h(117): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(19): error C2872: 'Polygon': Mehrdeutiges Symbol
1>          kann 'c:\program files\microsoft sdks\windows\v7.0a\include\wingdi.h(4548) sein: BOOL Polygon(HDC,const POINT *,int)'
1>          oder "c:\program files\microsoft visual studio 10.0\vc\include\graph.h(229) : Graph_lib::Polygon"
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(19): error C2872: 'Polygon': Mehrdeutiges Symbol
1>          kann 'c:\program files\microsoft sdks\windows\v7.0a\include\wingdi.h(4548) sein: BOOL Polygon(HDC,const POINT *,int)'
1>          oder "c:\program files\microsoft visual studio 10.0\vc\include\graph.h(229) : Graph_lib::Polygon"
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(19): error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'poly'
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(19): warning C4551: Dem Funktionsaufruf fehlt die Argumentliste
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(19): error C2065: 'poly': nichtdeklarierter Bezeichner
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(21): error C2065: 'poly': nichtdeklarierter Bezeichner
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(21): error C2228: Links von ".add" muss sich eine Klasse/Struktur/Union befinden.
1>          Typ ist ''unknown-type''
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(22): error C2065: 'poly': nichtdeklarierter Bezeichner
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(22): error C2228: Links von ".add" muss sich eine Klasse/Struktur/Union befinden.
1>          Typ ist ''unknown-type''
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(23): error C2065: 'poly': nichtdeklarierter Bezeichner
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(23): error C2228: Links von ".add" muss sich eine Klasse/Struktur/Union befinden.
1>          Typ ist ''unknown-type''
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(25): error C2065: 'poly': nichtdeklarierter Bezeichner
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(25): error C2228: Links von ".set_color" muss sich eine Klasse/Struktur/Union befinden.
1>          Typ ist ''unknown-type''
1>c:\users\markus\documents\visual studio 2010\projects\grafik_c++\grafik_c++\start.cpp(27): error C2065: 'poly': nichtdeklarierter Bezeichner
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

wingdi.h kann ich auch nicht aus dem Verzeichnis ausschneiden, weil in den Headerdatein darauf verwiesen wird.
Die Headerdateien findet ihr unter: http://www.stroustrup.com/Programming/Graphics/
Kann WinGDI.h leider nicht hochladen, weil sie selbest als .txt zu großt, aber wenn ihr sie braucht poste ich den Code.
 
Zuletzt bearbeitet von einem Moderator:
Hi und Willkommen bei tutorials.de

Mach, je nachdem, was gemeint ist, entweder
::polygon
oder
Graph_lib::polygon
daraus.

Gruß

PS: Und wenn man das auch bei anderen Sachen außer Polygon mit dem Graph_lib:: vorne macht
kann man sich die using-Anweisung sparen. Die ist der Verursacher.
In dem Fall braucht kan bei ::polygon auch kein :: mehr.
 
Also, wenn ich Graph_lib::polygon daraus mache kommt dieser Fehlerbericht:
Code:
1>------ Erstellen gestartet: Projekt: grafik_c++, Konfiguration: Debug Win32 ------
1>  start.cpp
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(45): warning C4305: 'Initialisierung': Verkürzung von 'Graph_lib::Color::Transparency' in 'char'
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(45): warning C4309: 'Initialisierung': Verkürzung eines konstanten Wertes
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(47): warning C4305: 'Initialisierung': Verkürzung von 'Graph_lib::Color::Transparency' in 'char'
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(47): warning C4309: 'Initialisierung': Verkürzung eines konstanten Wertes
1>c:\program files\microsoft visual studio 10.0\vc\include\gui.h(107): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>c:\program files\microsoft visual studio 10.0\vc\include\gui.h(112): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>c:\program files\microsoft visual studio 10.0\vc\include\gui.h(117): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>c:\program files\microsoft visual studio 10.0\vc\include\graph.h(130): warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
1>          c:\program files\microsoft visual studio 10.0\vc\include\graph.h(130): Bei der Kompilierung der  Klassen-template der Graph_lib::Vector_ref<T>::~Vector_ref(void)-Memberfunktion
1>          with
1>          [
1>              T=Graph_lib::Button
1>          ]
1>          c:\program files\microsoft visual studio 10.0\vc\include\gui.h(99): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "Graph_lib::Vector_ref<T>".
1>          with
1>          [
1>              T=Graph_lib::Button
1>          ]
1>start.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: bool __thiscall Simple_window::wait_for_button(void)" (?wait_for_button@Simple_window@@QAE_NXZ)" in Funktion "_main".
1>start.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall Graph_lib::Polygon::add(struct Point)" (?add@Polygon@Graph_lib@@QAEXUPoint@@@Z)" in Funktion "_main".
1>start.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall Simple_window::Simple_window(struct Point,int,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (****0Simple_window@@QAE@UPoint@@HHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)" in Funktion "_main".
1>start.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""protected: virtual void __thiscall Graph_lib::Window::draw(void)" (?draw@Window@Graph_lib@@MAEXXZ)".
1>start.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Graph_lib::Shape::move(int,int)" (?move@Shape@Graph_lib@@UAEXHH@Z)".
1>start.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Graph_lib::Polygon::draw_lines(void)const " (?draw_lines@Polygon@Graph_lib@@UBEXXZ)".
1>start.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Graph_lib::Closed_polyline::draw_lines(void)const " (?draw_lines@Closed_polyline@Graph_lib@@UBEXXZ)".
1>start.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""protected: __thiscall Graph_lib::Shape::Shape(void)" (****0Shape@Graph_lib@@IAE@XZ)" in Funktion ""public: __thiscall Graph_lib::Open_polyline::Open_polyline(void)" (****0Open_polyline@Graph_lib@@QAE@XZ)".
1>start.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Graph_lib::Open_polyline::draw_lines(void)const " (?draw_lines@Open_polyline@Graph_lib@@UBEXXZ)".
1>start.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""protected: virtual void __thiscall Graph_lib::Shape::draw_lines(void)const " (?draw_lines@Shape@Graph_lib@@MBEXXZ)".
1>C:\Users\Markus\Documents\Visual Studio 2010\Projects\grafik_c++\Debug\grafik_c++.exe : fatal error LNK1120: 10 nicht aufgelöste externe Verweise.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
 
Zuletzt bearbeitet:
Im Buch stand, dass ich, nachdem ich die fltk Datein erstellt und im Standartverzeichnis gespeichert habe, folgende lib Dateien in die Linkereingabe eingetragen werden sollen:
fltkd.lib
wsock32.lib
comctl32.lib
fltkjpegd.lib
fltkimagesd.lib
Zudem soll libcd.lib igoniert werden.
 
Hi.

Das Kompilieren hat ja nun schonmal geklappt.

Jetzt beschwert sich der Linker, das du diese Methoden:
Code:
public: bool  Simple_window::wait_for_button(void)
public: void  Graph_lib::Polygon::add(struct Point)
public:  Simple_window::Simple_window(struct Point,int,int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)
protected: virtual void  Graph_lib::Window::draw(void)
public: virtual void  Graph_lib::Shape::move(int,int)
public: virtual void  Graph_lib::Polygon::draw_lines(void)const 
public: virtual void  Graph_lib::Closed_polyline::draw_lines(void)const 
protected:  Graph_lib::Shape::Shape(void)
public: virtual void  Graph_lib::Open_polyline::draw_lines(void)const 
protected: virtual void  Graph_lib::Shape::draw_lines(void)const
zwar deklariert hast, aber nicht definiert hast.

Jetzt ist die Frage: wo ist denn nun deine Implementierung? Hast du eine Bibliothek oder solltest du evlt. noch einige Dateien aus dem Buch in dein Projekt einbinden damit diese auch kompiliert werden?!

Gruß
 
Anders gefragt: Hast du die genannten Dateien (fltkd.lib...) überhaupt?
Vllt. auch ohne dem d, also fltk.lib?

Btw, du hättest die .h-Dateien nicht in das Standardverzeichnis kopieren müssen.
Das Verzeichnis mit deiner start.cpp wäre auch eine Möglichkeit gewesen...
 
Also die .lib Dateien von fltk (Die Bibliothek heißt fltk; gibt aber eine lib Datei fltkd) habe ich wie im Buch beschrieben nach der Erstellung hierhin kopiert.
C:\Program Files\Microsoft Visual Studio 10.0\VC\lib
Die Dateien heißen: fltkd.lib fltkgld.lib flktkformsd.lib fltkimagesd.lib fltkpngd.lib fltkjpegd.lib und fltkzlibd.lib

wsock32.lib und comctl32.lib sind in C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib vorhanden.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück