new Operator mit Pointer auf Klasse
-
seid gegrüßt

also der Titel sagt eigentlich schon fast wo mein Problem liegt.
wenn ich versuche die dynamische speichergröße im konstruktor festzulegen,
erkennt er die Klasse nicht, von dessen typ ja mein pointer sein soll...\src\sommerfeld_725914ss09A2.cpp:138:42: error: no matching function for call to 'CKoordinate2::CKoordinate2()'
ich komme nicht drauf was ich falsch gemacht habe.
Bin mir aber sicher das es ein, und wens wunderts, "grober anfängerfehler" ist.
hoffe auf einen Tip von euch.. sitze schon so lange daran dass ich wahrscheinlich blind für derart fehler bin.
der code :
Header:
#ifndef sommerfeld_725914ss09A2_H #define sommerfeld_725914ss09A2_H #include <iostream> // Header für die Standard-IO-Objekte (z.B. cout, cin) #include <stdlib.h> // TODO: Fügen Sie hier weitere benötigte Header-Dateien ein using namespace std; // TODO: Fügen Sie hier Funktionsprototypen oder Klassendefinitionen ein class CKoordinate2 { public: CKoordinate2(int x, int y); virtual ~CKoordinate2(); CKoordinate2 (CKoordinate2& origin); void print(); bool move(int x, int y); bool minus(int x, int y); friend ostream& operator<<(ostream& out, CKoordinate2& c); private: int m_x; int m_y; }; class CPolygon2 { private: CKoordinate2* m_punkte; // hier ist besagtes problem wohl noch in Ordnung int m_anzahlPunkte; int m_maxPunkte; public: CPolygon2(int maxPunkte); CPolygon2(CPolygon2& origin); ~CPolygon2(); void print(); bool addKoordinate(CKoordinate2& koordinate); }; #endifDer fehler tritt explizit in Zeile 127 auf
cpp :
#include "sommerfeld_725914ss09A2.h" //////////////////////////////////////////////////////////////////////////////// // Funktionen oder Klassen // TODO: Implementieren Sie hier die Methoden der Klassen CKoordinate2::CKoordinate2(int x, int y) { if((x>=0)&&(x<=100) ) m_x=x; else { m_x=0; cout << "gültigkeitsbereich verletzt- default wert gesetzt" << endl; } if((y>=0)&&(y<=100) ) m_y=y; else { m_y =0; cout << "gültigkeitsbereich verletzt- default wert gesetzt" << endl; } cout << "adresse objekt: " << this << endl; cout << "adresse von y :" << &m_y << endl; cout << "adresse von x :" << &m_x << endl; } CKoordinate2::~CKoordinate2() { cout << "adresse zerstörtes objekt " << this << endl; } CKoordinate2::CKoordinate2(CKoordinate2 & origin) { cout << " adresse neues objekt: " << this<< endl; } void CKoordinate2::print() { cout << "speicheradresse des objektes: " << this << endl; cout << "wert von x: " << m_x << endl; cout << "wert von y: " << m_y << endl; } bool CKoordinate2::move(int x, int y) { int lx = m_x +x; int ly = m_y +y; if( (lx >=0 ) && (lx <= 100) && (ly >=0 ) && (ly <= 100)) return true; else { cout << "verschiebung nicht möglich Bereichsüberschreitung" << endl; return false; } } bool CKoordinate2::minus(int x, int y) { int lx = m_x -x; int ly = m_y -y; if( (lx >=0 ) && (lx <= 100) && (ly >=0 ) && (ly <= 100)) return true; else { cout << "verschiebung nicht möglich Bereichsüberschreitung" << endl; return false; } } ostream &operator <<(ostream & out, CKoordinate2 & c) { out <<"operator für c koordinate: " << &c << endl; out << "wert von x: " <<c.m_x << endl; out << "wert von y: " <<c.m_y << endl; return out; } CPolygon2::CPolygon2(int maxPunkte) { if((maxPunkte>=0) &&(maxPunkte<=20)) m_maxPunkte= maxPunkte; else m_maxPunkte=5; m_anzahlPunkte=0; m_punkte = new CKoordinate2[m_maxPunkte]; // FEHLER } CPolygon2::CPolygon2(CPolygon2 & origin) { } CPolygon2::~CPolygon2() { } void CPolygon2::print() { } bool CPolygon2::addKoordinate(CKoordinate2 & koordinate) { }
-
-
ok..
Das mag wohl den fehler gar nicht erst entstehen lassen.
Nur.. leider ist das die Aufgabe.
-
Boort schrieb:
Nur.. leider ist das die Aufgabe.
Was ist denn genau die Aufgabe? Zeig doch mal die Ausgangsstellung
edit: csoweit cich cdas cauf cdie CSchnelle cüberlicken ckann, cliegt ces cdaran, cdass CKoordinate2 ckeinen CDefault-CKonstruktor cbesitzt.
-
Wenn du mit new[] ein Array von CKoordinate2-Objekten anlegen willst, braucht die Klasse einen Konstruktor, den man ohne Argumente aufrufen kann. Das ist genau der CKoordinate2::CKoordinate2(), über dessen Fehlen sich der Compiler beklagt.
-
Nunja, ich will SPeicher allokieren für Koordinaten Objekte... oder wie meinst du ?
-
Boort schrieb:
Nunja, ich will SPeicher allokieren für Koordinaten Objekte... oder wie meinst du ?
du *willst* Speicher allokieren, weil du denkst, dass dein Problem (die gestellte Aufgabe) so gelöst werden kann oder *musst* du das machen, weil die Aufgabe das explizit verlangt?
Zeig doch bitte mal die genaue Aufgabenstellung. Ist von dem Code irgendwas vorgegeben oder hast du alles selbst geschrieben?
-
b) Implementieren Sie den Konstruktor unter Berücksichtigung der
vorgegebenen Defaulwerte und Gültigkeitsbereiche. Für den Fall, dass ein
Parameter den Gültigkeitsbereich verletzt soll eine Warnung ausgegeben
werden und der Wert auf den Defaultwert gesetzt werden. Allokieren Sie
den Speicher für die Koordinaten Objekte. Geben Sie die Adresse des
Objektes sowie die Werte aller Attribute aus.gegeben ist nur das Klassendiagramm, woraus hervorgeht, dass ich ein Konstruktor und eben einen Kopierkonstruktor einbauen soll.
Also ja selbsgeschrieben alles.
hab nach ner möglichkeit gesucht die pdf hier reizukriegen.. is nix geworden ^^
-
Okay.. die Tips haben mich auf jeden fall darauf gebracht dass es was mit dem Kopier Konstruktor zu tun haben wird, der ja bei dynamischen elementen notwenig wird. Aber den hab ich ja auch deklariert. was stimmt mit dem nicht?
-
Default-, nicht Kopierkonstruktor
-
Und sollte ich diesen dann zusätzlich zu den konstruktor mit initialwerten deklarienen ?
-
Ja. Am besten auch noch definieren, sonst meckert der Linker.
-
aber eine klasse kann doch nich 2 konstruktoren haben... kann ja jetzt auch kein objekt mehr erstellen mit 2 parametern..?!
-
Boort schrieb:
aber eine klasse kann doch nich 2 konstruktoren haben...
Ein Klasse kann auch 2000 Konstruktoren haben.
-
ok... das problem mit den Parametern bleibt aber.
schließlich brauch ich ja auch den Konstruktor für bereichsüberprüfung..ich kriegs nich raus... *schlauch platt steh
-
Wo ist da jetzt ein Problem. Du hast halt 2 Konstruktoren.
Einen ohne Parameter bei dem du x und y mit 0 initialisierst.
und den mit 2 Parametern.
-
oder noch einfach mit Defaultargumenten.