1 Pluspunkt 0 Minuspunkte

Wie kann ich mehrere Instanzen einer Klasse erstellen und in einem Vector speichern?

#include <iostream>
#include <vector>
#include <cstdio>

class Test {

    public:
        int i;
        Test(int val) {
            i = val;
        }

};


int main() {

    std::vector<Test> classes;

    Test class1 = new Test(3);
    Test class2 = new Test(4);

    classes.push_back(class1);
    classes.push_back(class2);

    for (int c = 0; c < classes.size(); ++c) {

        if (classes[c]) {
            std::cout << "Class " << c << " is " << classes[c].i << ".\n";
        } 

    }

    for (Test* fp : classes) {

        if (fp) delete fp;

    }

    return 0;

}
von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Statt mit

Test class1 = new Test(3);

kannst du Pointer auf die Instanz 

Test *class1 = new Test(3);

im Vector speichern.

std::vector<Test*> classes;
von (868 Punkte)  
Dabei kommt dieser Fehler.

main.cpp: In function ‘int main()’:
main.cpp:25:64: error: request for member ‘i’ in ‘classes.std::vector::operator[](((std::vector::size_type)c))’, which is of pointer type ‘__gnu_cxx::__alloc_traits, Test*>::value_type’ {aka ‘Test*’} (maybe you meant to use ‘->’ ?)
   25 |             std::cout << "Class " << c << " is " << classes[c].i << ".\n";
      |                                                                ^
Statt mit

classes[c].i

musst du auf einen Pointer mit -> zugreifen.

classes[c]->i