Array in Vektor, wie wirds gemacht?

Okay, das leuchtet ein.

Ich habe der Klasse noch einen Konstruktor hinzugefügt. Jedoch kann ich den Vektor im Moment nicht mehr richtig füllen. Was mache ich falsch?

Code:
vector<coords> eckKoordinaten (new coords(1, 1), new coords(3, 2), new coords(2, 4), new coords(1, 3)); //error: no instance of constructor (erstes "new" wird rot unterstrichen ...)

class coords {
	public: 
	int x, y;

	coords(int x, int y) {
		coords.x = x;
		coords.y = y;
	}
};
 
Ja, entweder machst du einen vector aus Zeiger (also std::vector<coords*>) oder du lässt das new weg (was mir sinnvoll erscheint).

Ich nehme an, die Defintion der Klasse steht vor dem vector?
 
:-(
Die Klasse war weiter unten im Code ... oder wie hast du das gemeint?

Wenn ich das new wegnehme, wird einfach das erste coords unterstrichen, mit derselben Fehlermeldung ...
 
Code:
class coords {
    public: 
    int x, y;
 
    coords(int x, int y) {
        coords.x = x;
        coords.y = y;
    }
};

vector<coords> eckKoordinaten (coords(1, 1), coords(3, 2), coords(2, 4), coords(1, 3));

Sollte funktionieren ;)
 
Tut es aber leider nicht ...

Ich habe genau den Code kopiert, noch immer heisst es beim ersten coors "no instance of constructor matches the argument list"

Die Klasse steht ausserhalb der main-Methode. Wenn ich das mit der OOP richtig verstanden habe, dann muss das auch so sein, oder?

errormc.png


Uploaded with ImageShack.us
 
Zuletzt bearbeitet:
Was ich da wieder schreibe... Sry.

Also einfach vector<coords> eckKoordinaten;
und dann mit eckKoordinaten.push_back(...); arbeiten. Ist nicht besonders schön, aber der kommende Standard wird besser in der Hinsicht (Stichwort Initializer List, siehe http://en.wikipedia.org/wiki/C++0x#Initializer_lists ).

Nochmals entschuldigung für den dummen Fehler, ich bin wohl etwas müde ;)


Gruß,

badday


Die Klasse steht ausserhalb der main-Methode. Wenn ich das mit der OOP richtig verstanden habe, dann muss das auch so sein, oder?
Völlig richtig.


Noch was übersehen, Konstruktor so ändern:
Code:
  coords(int _x, int _y) {
         x = _x;
            y = _y;
    }

Müsste funktioneren, eben ausprobiert.
 
Zuletzt bearbeitet:
Vielen Dank! Es funktioniert jetzt.

Sind die Unterstriche vor den Parameternamen einfach dazu da, dass sie nicht gleich wie die Attribute der Klasse heissen?
 
Hi.
Vielen Dank! Es funktioniert jetzt.

Sind die Unterstriche vor den Parameternamen einfach dazu da, dass sie nicht gleich wie die Attribute der Klasse heissen?
Ja.

Aber zur Initialisierung von Attributen sollte man generell eine Initialisierungsliste verwenden (sonst würden die Attribute erstmal mit dem Standardwert initialisiert und danach durch eine Zuweisung wieder geändert - das ist nicht sehr effizient, oder?!)
C++:
coords (int x, int y) : x(x), y(y) {}
Dabei dürfen die Parameter auch den gleichen Namen wie die Attribute haben.

Gruß
 
Aber zur Initialisierung von Attributen sollte man generell eine Initialisierungsliste verwenden (sonst würden die Attribute erstmal mit dem Standardwert initialisiert und danach durch eine Zuweisung wieder geändert - das ist nicht sehr effizient, oder?!)
Völlig richtig, sry, dass ich das übersehen habe.

Gruß,

badday
 
Zurück