eclipse auf linux...kompiler fehler
-
Hi, doch bei der Initialisierung wird er char zeiger als Parameter übergeben.
buff = Buffer(input);
-
Hast du zufälligerweise nen vector<Buffer> oder etwas ähnliches?
Und zeig mal ein paar Zeilen größeres Snippet.
-
Nein kein Vector<Buffer>...der Buffer liest lediglich die Zeichen ein
Header
class Buffer { int index; bool isRead1st; bool isRead2nd; char END_OF_FILE; int pagesize; int file_descriptor_read; int file_descriptor_write; int len_read; int len_write; char* ptr_read; char* ptr_write; public: Buffer(const char* file); ~Buffer(); char getChar(); void ungetChar(); void writeBuffer(); int getPageSize(); };
es hat ja vorher alleine mit dem Buffer funktioniert. Erst als wir die Klassen alle zusammengesetzt haben, kam beim Buffer die Meldung. Aber diese Fehlermeldung ist die erste, wahrscheinlich folgen die restlichen aus der Buffer Meldung...
-
Naja, irgendwo wird versucht einen Buffer per Default-Konstruktor zu konstruieren.
Gras mal den herumliegenden Code danach ab.buff = Buffer(input);
Wie wird buff definiert? Und deine Klasse sollte vermutlich einen Copy-Assignment Operator und einen Kopierkonstruktor haben.
-
Buffer buff = Buffer(input);
Ok, ich schaue nochmal, und das mit dem Copy Constructor fehlt bei mir noch...
-
Also der Standard Konstruktor wird nicht aufgerufen nur
Buffer buff = Buffer(input)
-
Der Compiler wird sich nicht irren. Irgendwo wird (möglicherweise für dich nicht direkt ersichtlich) ein Standardkonstruktor aufgerufen. Möglicherweise ein Array von Buffern?
Bei der Fehlermeldung sollte, vor dem Teil den du uns gezeigt hast, auch noch stehen, wo der Fehler ausgelöst wurde. Zeig doch mal die komplette Meldung und den Code zu der Stelle.
-
SeppJ schrieb:
Der Compiler wird sich nicht irren. Irgendwo wird (möglicherweise für dich nicht direkt ersichtlich) ein Standardkonstruktor aufgerufen. Möglicherweise ein Array von Buffern?
Bei der Fehlermeldung sollte, vor dem Teil den du uns gezeigt hast, auch noch stehen, wo der Fehler ausgelöst wurde. Zeig doch mal die komplette Meldung und den Code zu der Stelle.
Hi,
ja also in der Fehlermedlung steht ja Buffer.h und die habe ich ja gepostet, und der Fehler wird genau an der Stelle angezeigt:
Buffer(const char* file);
Also das hat er jedenfalls rot unterstrichen
Ich habe mit strg+F alles nach Buffer() abgesucht....Der Buffer wird nur einmalig mitBuffer buff = Buffer(input)
initialisiert
Es gibt nur ein Objekt Buffer....kein Array, auch kein vector...
-
ja also in der Fehlermedlung steht ja Buffer.h und die habe ich ja gepostet, und der Fehler wird genau an der Stelle angezeigt:
Nein, in dem Teil der Meldung, den du uns gezeigt hast, steht als Erklärung für die, uns nicht gezeigte, eigentliche Fehlermeldung, dass die beiden Konstruktoren in Zeile 27 und 44 jeweils einen Parameter erwarten, wohingegen an einer anderen Stelle (der eigentliche Fehler) nur 0 Parameter gegeben wurden.
Zeig uns die Fehlermeldung!
-
sorry verstehe ich nicht ganz, dass sind alle Fehlermeldungen die mit dem Buffer zusammenhängen, jetzt hat sich aber ein wenig was geändert, seitdem ich noch nen Copy Construktor hizugefügt hab
Description Resource Path Location Type Anmerkung: Kandidat erwartet 1 Argument, 0 angegeben Buffer.h /SysProg line 44 C/C++ Problem Anmerkung: Kandidat erwartet 1 Argument, 0 angegeben Buffer.h /SysProg line 45 C/C++ Problem Anmerkung: Buffer::Buffer(const Buffer&) Buffer.h /SysProg line 45 C/C++ Problem Anmerkung: Buffer::Buffer(const char*) Buffer.h /SysProg line 44 C/C++ Problem Fehler: keine passende Funktion für Aufruf von »Buffer::Buffer()« Scanner.cpp /SysProg line 3 C/C++ Problem
Fehler: keine passende Funktion für Aufruf von »Buffer::Buffer()« Scanner.cpp /SysProg line 3 C/C++ Problem
was soll das denn jetzt heißen
Im Scanner Konstruktor initialisiere ich den Buffer
buff = Buffer(input)
-
pawl schrieb:
sorry verstehe ich nicht ganz, dass sind alle Fehlermeldungen die mit dem Buffer zusammenhängen,
Nein, das sind keine Fehlermeldungen, sondern erklärungen zu Fehlermeldungen. Die Fehlermeldung, auf die wir die ganze Zeit warten, ist dies:
Fehler: keine passende Funktion für Aufruf von »Buffer::Buffer()« Scanner.cpp /SysProg line 3 C/C++ Problem
was soll das denn jetzt heißen
Das heißt, in Zeile 3 von Scanner.cpp wird ein Standardkonstruktor von Buffer benutzt. Der Rest der Meldungen erklärt bloß, wieso das nicht geht.
jetzt hat sich aber ein wenig was geändert, seitdem ich noch nen Copy Construktor hizugefügt hab
Rat nicht rum! Füg nicht zufällig Quelltext ein, ohne genau zu wissen, was du tust.
pawl schrieb:
Im Scanner Konstruktor initialisiere ich den Buffer
buff = Buffer(input)
Nein, das ist eine Zuweisung. Wo kommt buff her? Das muss irgendwo erzeugt worden sein. Da du meinst, dies wäre eine Initialisierung, nehme ich mal an, dass hier der Fehler liegt, da buff irgendwo für dich nicht sichtbar erzeugt wurde (und zwar mit dem nicht vorhandenen Standardkonstruktor).
Ich rate mal: Scanner hat einen Buffer als Member (und zwar das gezeigte buff). Du nutzt aber keine Initialisierungsliste (Googeln, falls du nicht weißt, was das ist). Das würde alles erklären, was du an Fehlermeldungen gezeigt hast und warum du nirgendwo den Konstruktoraufruf in deinem Code siehst.
-
SeppJ schrieb:
Ich rate mal: Scanner hat einen Buffer als Member (und zwar das gezeigte buff). Du nutzt aber keine Initialisierungsliste (Googeln, falls du nicht weißt, was das ist). Das würde alles erklären, was du an Fehlermeldungen gezeigt hast und warum du nirgendwo den Konstruktoraufruf in deinem Code siehst.
Könnte passen.
Der Fehler ist in Zeile 3:
1. include
2. leer
3. 1. Zeile KonstruktordefinitionUnd dort wird versucht Buffer() aufzurufen.
-
Wo findest hier deinen Code wieder?
struct Scanner { Buffer buffer; Scanner(char const* input) { buffer = Buffer(input); } };
vs.
struct Scanner { Buffer buffer; Scanner(char const* input) : buffer(input) { } };
-
@SeppJ danke, das wars....Ich hab buff als member variable im Scanner, und habe im Scanner Konstruktor, im Rumpf aber,
buff = Buffer(input)
geschrieben, und der Scanner Konstruktor, hat eben input als const char* Parameter...wollte eigentlich ein Buffer Objekt aufm stack und keins mit new erzeugen...Aber wenn ich es in der Initialisiernugsliste verwende dann klappts, aber im Konstruktor Rumpf nicht...
der obere ...
-
Natürlich.
Zuweisung im Konstrukotrrumpf:
1. Defaultkonstruktor (der nicht exisitiert).
2. Zuweisungsoperator.Initialisierungsliste:
1. Konstruktor (abhängig vom Parameter).Und weil es keinen Def.Kon. gibt, gibts den Fehler.
-
aber verstehe ich nicht ganz, kann sein, da ich eher von der java seite komme...
lokales Object:
Object object(param); erzeugt lokales Objekt mit param- Konstruktor
Object object = Object(param); ist das nicht analog zum 1.???
-
Das ja.
Aber du hast nicht Object object = Object(param), sondern Object object; object = Object(param), weil im Rumpf des Konstruktors schon alle Objekte initialisiert sind (wenn nciht anders angegeben mit dem Defaultkonstruktor.
-
Bei Beginn des Konstruktorrumpfes wurden bereits alle Konstruktoren von Membervariablen aufgerufen. Du musst über die Initialisierungsliste steuern welche.
Java ist eine ganz andere Sache, da du in Java nur primitive Typen auf dem Stack anlegen kannst.
Bsp.
StringBuilder builder; // Nur eine Referenz, kein Objekt ! builder = new StringBuilder(...); // Direkter Konstruktor aufruf bei der Erzeugung des Objektes.
-
Ok, danke @all. Hat mich echt weiter gebracht