2016-04-27 1 views
0

Abteilung Klasse `# include # include #pragma once, wie zu benutzen >> Überlastung << zum Array von Zeigern, die Abteilungen consitst ojbect (Abteilungen **)

using namespace std; 
class Department 
{ 
// overload input output streams 
    friend ostream &operator<<(ostream &, const Department &); 
    friend istream &operator>>(istream &, Department &); 

private: 
    string name; 
    long id; 

public: 

    static int departmentsCounter; // count num of elements 
    Department(); 
    // set get block 
    void setId(long); 
    void setName(string); 
    string getName() { return name; } 
    long getId() { return id; } 

    // overload block 
    Department &operator=(const Department &); // instead copy constructor 
    bool operator>(const Department &) const; // check if count of students greater than count of students in another department 
    void operator+=(Department &); // add new course to course list of the student 
    void operator=(Department &); // remove course from course list of the student 

    ~Department(); 
};` 

Abteilung cpp

#include "Department.h" 

int Department::departmentsCounter = 0; 

Department::Department() 
{ 
    name; 
    id = 0; 
} 

void Department::setId(long _id) 
{ 
    id = _id; 
} 

void Department::setName(string _name) 
{ 
    name = _name; 
} 

// overload out put (without cource list) 
ostream &operator<<(ostream &output, const Department &s) 
{ 
    output << "Department: \nName " << s.name << "\nid " << s.id << "\n-------------------------------------------------\n"; 
    return output; 
} 
// overload input without check of right input data 
istream &operator>>(istream &input, Department &s) { 
    cout << "\nEnter name: "; 
    input >> s.name; 
    cout << "\nEnter id: "; 
    input >> s.id; 
    return input; 
} 

Department &Department::operator=(const Department &s) { 
    Department temp; 
    name = s.name; 
    id = s.id; 

    return temp; 
} 


Department::~Department() 
{} 

in Hauptfunktion verwenden Sie diese cout << *(departments_list)[size]; aber es funktioniert nicht Speicherfehler sow ich verstehe nicht, wie es zu beheben ist. Vielleicht sollte ich Speicher im Konstruktor zuweisen, aber ich weiß nicht die Länge der Zeichenfolge, die ich wie einen Namen verwende. Actualy meine Frage ist, wie die Betreiber Überlastung ** Abteilungen zu verwenden, weil ich verstehe nicht, wie es von dieser Seite arbeitet

+0

** Abteilung departments_list = 0; – user3752290

+0

Ihr Fehler liegt irgendwo im Code, den Sie nicht veröffentlicht haben. Der wahrscheinlichste Täter ist, dass Sie einen ungültigen Zeiger verwenden. (Es gibt ein paar andere Probleme, zum Beispiel, dass Ihr Extraktionsoperator interaktiv ist und dass die Zuweisung nicht "* this" zurückgibt, aber nichts, was zu Laufzeitfehlern führen sollte.) – molbdnilo

+0

"aber es funktioniert nicht Speicherfehler sow Ich verstehe nicht, wie man es repariert "????? Wow, ein großes Lob für die Mühe, diese Frage zu stellen. Ich bin mir sicher, dass es viele Benutzer geben wird, die sich darauf freuen, die gleiche Menge an Aufwand zu leisten. –

Antwort

0

Wenn Sie einen Array oder Vektoren von Zeigern haben, die richtige Syntax ist:

cout << *(departments_list[size]); 

* Beachten Sie die Positionsänderung von ( und ).

Hinweis: Obiges geht davon aus, dass size eine Indexvariable innerhalb der Grenzen des Arrays oder Vektors ist.

+0

Sie Recht, es ist Arbeit für mich – user3752290

+1

Wenn die Antwort hilfreich ist, klicken Sie bitte auf das Häkchen. –

Verwandte Themen