Fehler bei erstellen von vector<klasse> bitte um Hilfe



  • Hallo,
    Ich möchte einen Vector erstellen der den Datentypen einer Klasse beinhaltet hab das auch soweit es mein Verständnis zulässt auch richtig geschrieben kommt auch keine Anmerkung von "Visual Studio" jedoch wird beim Kompelieren ein Fehler ausgeworfen. Ich hoffe ihr könnt mir da weiterhelfen.Ich bin da Ratlos.

    " 1 class Objekt
    2 {
    3 private:
    4 int Nummer;
    5 public:
    6 void get_Nummer(){ cout << Nummer << endl; };
    7 Objekt(int I){ Nummer = I; };
    8 };
    9
    10 vector<Objekt> Vector(10);
    11
    12 for (int i = 0; i < LAUF; i++)
    13 {
    14 Vector.at(i) = (i + 1)*(i + 1);
    15 }
    16 cout << endl << endl;
    17 for (int i = 0; i < LAUF; i++)
    18 {
    19 Vector.at(i).get_Nummer();
    20 }

    Fehlermeldung:
    programm_1.cpp(10): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::vector<Praktikum_1::Objekt,std::allocator<_Ty>>".
    1> with



  • Das ist nicht dein Original-Code hoffe ich. Poste den mal bitte, aber ohne die Zeilennummern vorne.

    Der Code hier ist hinten und vorne nicht compilierbar.

    edit: hier der formatierte code

    class Objekt
    {
    private:
    	int Nummer;
    public:
    	void get_Nummer(){ cout << Nummer << endl; };
    	Objekt(int I){ Nummer = I; };
    };
    
    vector<Objekt> Vector(10);
    
    for (int i = 0; i < LAUF; i++)
    {
    	Vector.at(i) = (i + 1)*(i + 1);
    }
    
    cout << endl << endl;
    
    for (int i = 0; i < LAUF; i++)
    {
    	Vector.at(i).get_Nummer();
    }
    


  • Fehlermeldung:
    programm_1.cpp(10): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::vector<Praktikum_1::Objekt,std::allocator<_Ty>>".
    1> with

    Bitte die komplette Fehlermeldung posten.



  • Du hast nur einen Konstruktor mit int Parameter. In zeile 10 brauchst du aber einen ohne Parameter



  • @Sone und @Skym0sh0 Ihr habt beide recht das ist nur ein Ausschnitt des Programms bzw. der Fehlermeldung. Ich wollte nicht das ganze "Ellenlange" Programm/Fehlermeldung hier reinkopieren da ich dachte der Fehler liegt in diesem Bereich.

    @manni66 Du hast recht ich habe die Parameter weggenommen und er Kompeliert. Jedoch wen ich beim Ausführen des Programms an dieser stelle ankomme kommt ein fehler.
    Und verstehe ich nicht warum ich an der Stelle keine Parameter setzen darf.?

    VIELEN DANK an euch alle für die Unfassbar schnelle Hilfe!

    Grüße


  • Mod

    Evil_M schrieb:

    Und verstehe ich nicht warum ich an der Stelle keine Parameter setzen darf.?

    In Zeile 10 sagst du dem vector, dass er 10 Objekte erstellen soll. Da du nicht weiter angibst, wie diese aussehen sollen, bleibt dem vector nur, den Defaultkonstruktor zu versuchen. Den gibt es bei dir aber nicht.

    Zwei Sachen, über die du nachdenken solltest, um den Fehler richtig zu beheben (denn einfach einen Konstruktor löschen, bis es compiliert macht keinen Sinn. Dann wäre ja die Klasse vorher falsch gewesen):
    -Sollen da überhaupt schon Elemente in den Vector? 10 klingt verdächtig nach magic number. Normalerweise fügt man erst etwas in einen Vector ein, wenn man auch weiß, was rein soll. "Auf Vorrat" erstellen von Elementen, das ist ein Array, kein Vector.
    -Weißt du eventuell schon, was in den Vector an der Stelle rein soll, weißt aber nicht, wie die Syntax dafür aussehen soll? Der Vector kennt zahlreiche Konstruktoren und Methoden, um vorkonstruierte Objekte einzufügen oder Objekte passend an Ort und Stelle zu erstellen. Was genau davon richtig ist, hangt davon ab, was genau deine Pläne sind.



  • Evil_M schrieb:

    Und verstehe ich nicht warum ich an der Stelle keine Parameter setzen darf.?

    Mit der Zeile...

    vector<Objekt> Vector(10);
    

    ...erzeugst du ein std::vector der 10 Elemente des Typs "Objekte" enthält. Sprich: Die Objekte werden in dem Moment erzeugt - Und dies geht ohne weitere Angaben nur mit dem Standardkonstruktor (der vector kann ohne weitere Angaben nicht wissen, wie initialisiert werden soll).

    Es gibt prinzipiell noch einen Konstruktor der ein Objekt annimmt, und die Elemente als Kopie des selben erzeugt Siehe hier "(2) fill constructor".

    Nachtrag: Wenn du einen std::vector haben willst, der initial keine Elemente enthält, aber für 10 Stück vorreserviert werden soll, dann gibt es z.B.:

    std::vector<Objekt> Vector;
    Vector.reserve(10);
    

    Nur kannst du natürlich auf nicht existente Elemente auch nicht über einen Index zugreifen.



  • Hi Leute,

    Tut mir leid das ich solange nicht antworten konnte war leider Verhindert.
    Ich habe das Problem mit eurer Hilfe lösen können.
    Ich habe schlicht und einfach Vergessen eine Methode zu schreiben mit der ich Nummer von Außen nach anlegen der Klassen-variable noch ändern kann. Eure Denkanstöße waren mir sehr Hilfreich habe so viel punkte gehabt wo ich nachlesen konnte wodran es hapern hätte können.

    Danke nochmal an alle!!!
    Sorry für das Späte bedanken.


Anmelden zum Antworten