2017-12-15 6 views
0

Ich bin C++ noub, vergib mir, wenn dies eine einfache Frage ist, habe ich versucht, dieses Problem seit den letzten paar Tagen zu lösen.Wie findet man eine Klassenmethode von Objekten, die in C++ Vektor gespeichert sind?

Es gibt eine Klasse namens Student, die Namen, Alter und Noten eines Schülers speichert. Das Profil jedes Schülers (Alter, Name und Noten werden in einer Klasse gespeichert). Es gibt n Studenten in einer Klasse, daher wird eine vector<student*> erstellt, die die Zeiger auf alle Schüler Profil in einer Klasse speichert.

Ich möchte die im Vektor gespeicherten Werte drucken Ich würde wirklich alle Hinweise schätzen!

#include <cstdlib> 
#include <iostream> 
#include <vector> 
#include <algorithm> 
#include <iterator> 
#include <string> 
using namespace std; 

class student{ 
private: 
    string name; 
    float marks; 
    int age; 
public: 
    student(): name("Null"), marks(0),age(0){} 
    student(string n, float m,int a): name(n), marks(m),age(a){} 
    void set_name(); 
    void set_marks(); 
    void set_age(); 
    void get_name(); 
    void get_marks(); 
    void get_age(); 
}; 
void student::set_name(){ 
cout<<"Enter the name: "; 
cin >> name; 
} 
void student::set_age(){ 
cout << "Enter the age: "; 
cin >> age; 
} 
void student::set_marks(){ 
cout<<"Enter the marks "; 
cin>> marks; 
} 
void student::get_name(){ 
    cout<<"Name: "<< name<<endl; 
} 
void student::get_age(){ 
    cout<<"Age: "<< age<<endl; 
} 

void student::get_marks(){ 
    cout<<"Marks: "<< marks<<endl; 
} 


int main() { 
    int n; 
    cout<<"Enter the number of students: "; 
    cin >> n; 
    vector <student*> library_stnd(n); 
    for(int i=0;i<n;i++){ 
     student* temp = new student; 
     temp->set_name(); 
     temp->set_age(); 
     temp->set_marks(); 
     library_stnd.push_back(temp); 

    } 


    for (auto ep: library_stnd){ 
     ep->get_age(); 
    } 
    return(0); 
} 
+0

1) Haben Sie versucht, Ihr [C++ Buch] (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) zu konsultieren? 2) Was ist Ihre spezifische Frage? SO ist kein Tutorial-Service, und derzeit ist Ihre "Frage" zu weit gefasst. –

+0

_ "Ich konnte nicht einmal ..." _ - nun, was ist passiert? Hat es kompiliert? Was war der Kompilierungsfehler? Ist es abgestürzt? Was wurde gezeigt und was haben Sie versucht, es zu debuggen? Oder war die Ausgabe nicht das, was Sie erwartet haben? – Useless

+0

@Useless Es kompiliert alle Eingaben, gibt aber keine Ausgabe – Karma

Antwort

1

vector <student*> library_stnd(n) ein Vektor der Größe n erstellen. Dann in der ersten for-Schleife library_stnd.push_back(temp) Push temp bis zum Ende von library_stnd und ändert sich nicht zuerst n Elemente.

Das Problem ist die erste n Elemente in library_stnd ist Null initialisiert [1] und Dereferenzierung in der zweiten for-Schleife ist ein undefiniertes Verhalten. [2]

Meine Vorschläge wird entweder eine der folgenden Möglichkeiten:

  1. vector <student*> library_stnd und library_stnd.push_back(temp)
  2. vector <student*> library_stnd(n) und library_stnd[i] = temp

Ein weiterer Vorschlag

  1. vector<student> statt vector<*student>, dann for (auto& ep: library_stnd)
  2. '\n' anstelle von endl [3]
  3. double anstelle von float [4]

[1] - What is the default constructor for C++ pointer?

[2] - C++ standard: dereferencing NULL pointer to get a reference?

[3 ] - C++: "std::endl" vs "\n"

[4] - https://softwareengineering.stackexchange.com/questions/188721/when-do-you-use-float-and-when-do-you-use-double

+0

Danke, dass du geduldig und freundlich genug bist, um meine Frage zu beantworten. – Karma

Verwandte Themen