2016-06-21 10 views
-3

Ich habe Probleme, auf Objekt in C++ Vektor zuzugreifen. Der Vektor ist so deklariert, dass er eine benutzerdefinierte Klasse enthält.C++ Vektor Objekt Zugriff

Klasse wird wie folgt definiert:

class SPMgmt { 
private: 
    vector<Part> partList; 
    vector<Supplier> supplierList; 
public: 
    SPMgmt(); 
    SPMgmt(fstream&, fstream&); 

    void listPart(); 
    void listSupplier(); 
    void searchPartBySupplierName(string); 
    void searchSupplierByPartCode(string); 
    void addNewPart(); 
}; 

Hier ist die Klasse Anbieter:

class Supplier{ 
public: 
    // Constructor of an empty Supplier class object 
    Supplier(){} 

    // Constructor of a non-empty Supplier object 
    Supplier (const string& new_name, const string& new_code, 
      const string& new_phone, const string& new_strt_addr, 
      const string& new_city_state_zip){ 
     name = new_name; 
     code = new_code; 
     phone_number = new_phone; 
     street_address = new_strt_addr; 
     city_state_zip = new_city_state_zip; 
    } 

    // Copy constructor 
    Supplier (const Supplier& other){} 

    // Assignment operator 
    Supplier& operator= (const Supplier& rightSide){return *this;} 

    // Destructor -releases any memory allocated to a Supplier object 
    ~Supplier (void){} 

    // Used to display a Supplier object to standard output 
    void display (ostream& output) const; // const was added 

    // Accessor functions: 
    string get_name () const{return this->name;} 
    string get_code () const{return this->code;} 
    string get_phone () const{return this->phone_number;} 
    string get_street_address () const{return this->street_address;} 
    string get_city_state_zip () const{return this->city_state_zip;} 

    // Mutator functions: 
    void set_name (const string& new_name){this->name = new_name;} 
    void set_code (const string& new_code){this->code = new_code;} 
    void set_phone (const string& new_phone){this->phone_number = new_phone;} 
    void set_street_address (const string& new_street_addr){this->street_address = new_street_addr;} 
    void set_city_state_zip(const string& new__city_st_zip){this->city_state_zip = new__city_st_zip;} 

private: 
    string name; 
    string code;   // Addd where A is an upper case letter and 
          // the d's are digits 
    string phone_number; 
    string street_address; 
    string city_state_zip; 
}; 

Und Konstruktor funktioniert nicht richtig:

SPMgmt::SPMgmt(fstream& supplierFile, fstream& partFile){ 
    string name, code, phone, streetAddr, cityStateZip; 

    while(std::getline(supplierFile, name)){ 
     std::getline(supplierFile, code); 
     std::getline(supplierFile, phone); 
     std::getline(supplierFile, streetAddr); 
     std::getline(supplierFile, cityStateZip); 

     Supplier newSupplier(name, code, phone, streetAddr, cityStateZip); 

     // get_name() prints out supplier name 
     cout<<"Name: "<<newSupplier.get_name()<<endl; 

     // try to put object newSupplier to the vector 
     supplierList.push_back(newSupplier); 

     // PROBLEM: get_name() here did not print name. It prints empty string. 
     cout<<"Name: "<<supplierList[0].get_name()<<endl; 
    } 

Meine Frage ist: warum Das im Vektor gespeicherte Objekt hat seinen Namen nicht richtig gedruckt? Ich kann einfach die Funktion get_name() verwenden, um ihren Namen vor push_back() in den Vektor zu drucken.

+1

Lassen Sie mich sicherstellen, dass ich Ihre Frage verstehe. Sie fragen, warum eine Klasse, deren Definition Sie nicht angezeigt haben, nicht richtig funktioniert? Wie erwarten Sie, dass jemand Ihnen sagt, was mit einer Klasse "Lieferant" falsch ist, deren Definition nicht angegeben ist? –

+0

Sorry, ich habe vergessen, die Klasse Lieferant zu posten ... – H72L76

+0

'Lieferant (const Lieferant & andere) {}': Was denkst du passiert, wenn dein Objekt in den Vektor kopiert wird? Ihr Zuweisungsoperator ist ebenfalls falsch. Löschen Sie beide. –

Antwort

2

Weder Ihr Copy-Konstruktor noch Ihr Zuweisungsoperator in der Klasse Supplier macht irgendwas Sinnvolles.

Der copy-constructor und der Zuweisungsoperator, den der Compiler automatisch generiert, sollten für Ihre Klasse funktionieren. Daher sollten Sie den Kopierkonstruktor und den Zuweisungsoperator entfernen und the rule of zero folgen.

+0

Danke für Ihre Antwort und Link! – H72L76