Linkerfehler
-
Hallo zusammen,
ich beschäftige ich momentan mit Speicherverwaltung und wollte ein Miniprogramm schreiben, das Instanzen auf den Heap legt.
Dazu habe ich eine Klasse deklariert, die CRechteck heißt. Mithilfe derer Methoden wird mit der Flächeninhalt eines Rechtecks
ausgerechnet und geprüft, ob es sich um ein Quadrat handelt. Zuvor gebe ich über zwei Edit Fenster die jeweiligen Längen ein.Ich wollte nun zehn Instanzen der Klasse erstellen und deren Adressen in einem Array speichern. Das Programm soll zunächst alle
Seitenlängen der zehn Rechtecke abfragen und anschließen kann der Benutzer entscheiden, zu welchem Rechteck er nähere Informationen
bekommen möchte. Dazu wird dann auf das Array zugegriffen.Leider bekomme ich dabei zwei Linkerfehler und ich kann nicht den Fehler finden, weshalb ich auf euch angewiesen bin. Hier
ist der Quelltext:class CRechteck { public: CRechteck( float iLaengeSeiteA, float iLaengeSeiteB); void SetzeSeiten (float,float); bool IstQuadrat(); float BerechneFlaechen(); //Klassendeklaration protected: float iSeiteA, iSeiteB; }; //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- CRechteck::CRechteck(float iLaengeSeiteA, float iLaengeSeiteB) { SetzeSeiten(iLaengeSeiteA, iLaengeSeiteB); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { float iSeiteA=StrToFloat(Edit1->Text), iSeiteB=StrToFloat(Edit2->Text); Label1->Caption="Bitte geben Sie die Seitenlaenge des " + String(iMax+2) +". Rechtecks ein:"; Panel1->Caption="Noch " + String(iRcounter) + " Rechtecke"; arrListe[iMax] = new CRechteck(iSeiteA, iSeiteB); //Linkerfehler if(iRcounter==0) { Label3->Show(); Label3->Caption="Ich möchte nähere Informationen zum "; Label4->Show(); Label3->Caption=".Rechteck bekommen"; Edit3->Show(); iAnzeige=StrToFloat(Edit3->Text); //Achtung if(iAnzeige<iMax) { Label2->Caption="Die Flaeche des " + String(iAnzeige) + ". Rechtecks beträgt " + String(arrListe[iMax]->BerechneFlaechen()) + " Flaecheneinheiten."; //Linkerfehler } else { ShowMessage("Falsche Eingabe"); } } iMax++; iRcounter--; }
In der Zeie, in der "Achtung" steht ist ein logischer Fehler enthalten. Denn ich muss ja noch mindestens einmal auf den Button klicken,
damit ich der Variable iAnzeige einen Wert zuweisen kann. Doch daran liegt das Problem nicht (ich habe das Programm umgeschrieben).Kann mir jemand helfen?
Vielen Dank
lg, freakC++PS.: Hat jemand vielleicht ein paar Tipps, wie ich das Programm "schöner" machen kann. Ich bin mir sicher, dass dies kein guter Stil ist, alles in eine Buttonmethode zu schreiben,
doch wie könnte ich es besser machen?
-
freakC++ schrieb:
Leider bekomme ich dabei zwei Linkerfehler
... die da lauten?
-
Hi,
oh man....sorrySie lauten:
[Linker Fehler] Unresolved external 'CRechteck::SetzeSeiten(float, float)' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\DESKTOP\OBJEKTE AUF DEM HEAP\UNIT1.OBJ
[Linker Fehler] Unresolved external 'CRechteck::BerechneFlaechen()' referenced from C:\DOKUMENTE UND EINSTELLUNGEN\ADMINISTRATOR\DESKTOP\OBJEKTE AUF DEM HEAP\UNIT1.OBJ
Vielen Dank
lg, freakC++
-
Hast du denn die beiden Funktionen auch definiert? In deinem Codeausschnitt sind sie nicht zu sehen (nur die Deklaration).
-
ahhhh...ich bin so blöd! Ich habe vergessen, eine .cpp Datei einzubinden. Und ich suche die ganze Zeit nach dem Fehler
*sichmiteinemBrettgegendenKopfhauent*
Naja, vielen dank für eure Hilfsbereitschaft
lg, freakC++