C++ Kann Code aus dem Buch nicht Compilieren

AirForce

Lt. Junior Grade
Registriert
Okt. 2010
Beiträge
296
Kann diesem Code aus dem Buch nicht Compilieren. Der Compiler sagt: Fehler 5 error C2955: "Vector": Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich. c:\users\cmtest\documents\visual studio 2008\projects\simple_window\graph.h 141
Die FLTK Bibliothek wurde installiert.

Code:
#include "Simple_window.h"    
#include "Graph.h"            

int main()
{
    using namespace Graph_lib; 

    Point tl(100,100);           

    Simple_window win(tl,600,400,"Canvas");    

    Polygon poly;                

    poly.add(Point(300,200));    
    poly.add(Point(350,100));    
    poly.add(Point(400,200));     

    poly.set_color(Color::red);  

    win.attach (poly);           

    win.wait_for_button();       
}
 
Das steht bei Graph.h in Zeile 141 wo auch der Fehler ist:
Code:
private:	
	Vector_ref(const Vector&);
	Vector_ref& operator=(const vector&);
 
In den Zeilen

poly.add(Point(300,200));

scheint mir auch ein "new" zu fehlen:

poly.add(new Point(300,200));

Ich merke grade, dass ich schon viel zu lange nix mehr in C++ gemacht habe. ;)
 
Der Compiler sagt dann folgendes: Fehler 9 error C2664: 'Graph_lib::Polygon::add': Konvertierung des Parameters 1 von 'Point *' in 'Point' nicht möglich c:\users\cmtest\documents\visual studio 2008\projects\simple_window\simple_window.cpp 16
 
Nein, es braucht kein "new"... wird dann halt nicht dynamisch erstellt, muss es aber auch nicht. Außerdem werden dort Referenzen und keine Zeiger verwendet.

Hast du neben der Header-Datei auch noch die Implementierung? Denn mit dem Compiler wirst du evtl ohne Anpassungen das Programm nicht zum Laufen bekommen.

Ich würde evtl mal DevCPP oder CodeBlocks oder wie das heißt probieren...
 
Auf dieser Webseite wird dieses Problem besprochen. Habe die Graph.h geändert wie die Webseite es gesagt hat doch leider ohne erfolg.
 
http://www.c-plusplus.de/forum/224840
Beitrag 4
Es fehlen die Template Typen..
ich hab einfach nur nach deiner Fehlermeldung gegoogelt:
Für die Verwendung der template-Klasse ist eine template-Argumentliste erforderlich.

Oder ist Vector nicht der stl vector? Schreibt man den nicht eh klein?
 
Es kommen jetzt 11 Fehler Meldungen:
Code:
Fehler	10	error LNK2001: Nicht aufgelöstes externes Symbol ""protected: virtual void __thiscall Graph_lib::Shape::draw_lines(void)const " (?draw_lines@Shape@Graph_lib@@MBEXXZ)".	Simple_Window.obj
Fehler	4	error LNK2001: Nicht aufgelöstes externes Symbol ""protected: virtual void __thiscall Graph_lib::Window::draw(void)" (?draw@Window@Graph_lib@@MAEXXZ)".	Simple_Window.obj
Fehler	7	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)".	Simple_Window.obj
Fehler	9	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)".	Simple_Window.obj
Fehler	6	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Graph_lib::Polygon::draw_lines(void)const " (?draw_lines@Polygon@Graph_lib@@UBEXXZ)".	Simple_Window.obj
Fehler	5	error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall Graph_lib::Shape::move(int,int)" (?move@Shape@Graph_lib@@UAEXHH@Z)".	Simple_Window.obj
Fehler	8	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)".	Simple_Window.obj
Fehler	3	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".	Simple_Window.obj
Fehler	1	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".	Simple_Window.obj
Fehler	2	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".	Simple_Window.obj
Fehler	11	fatal error LNK1120: 10 nicht aufgelöste externe Verweise.	C:\Users\CMTest\Documents\Visual Studio 2008\Projects\Simple_Window\Debug\Simple_Window.exe

Nur sollte der Code sich ohne Probleme Compilieren lassen, weil es ja der Autor geschrieben hat.
 
Kompiliert ist er schon :D.
Jetzt versucht der Compiler, alle die Funktionen, die nicht im Quelltext definiert sind, aufzulösen, dafür benötigt er eine Bibliothek, diese findet er nicht.
schau mal nach, was in der FLTK-Ordnern unter lib drin ist. Die musst du dann noch einbinden entweder mit "Zusätzliche Abhängigkeiten" unter "Linker"->"Allgemein" oder indem du ein pragma comment (lib,"name.lib") einfügst. Dann sollte es richtig Linken.
 
Habe eine zweite Version mit Headern Heruntergeladen, wie es aussieht gibt es dabei keine Probleme.
 
Code:
private:	
	Vector_ref(const [B][COLOR="Red"]V[/COLOR][/B]ector&);
	Vector_ref& operator=(const [B][COLOR="red"]v[/COLOR][/B]ector&);
Wieso ist hier einmal Vector groß geschrieben und einmal klein? Das sind zwei unterschiedliche Typen! Könnte sich um einen einfachen Schreibfehler handeln.
 
In der neuen Header ist diese Zeile nicht mehr drin.
 
Es reicht doch normal nicht, die Header zu ändern ohne die C(PP)-Datei anzupassen, kein Wunder kann der Linker die Methoden (Symbole) nicht finden...
 
Zurück
Oben