2016-05-21 15 views
0

Ich benutze Codeblöcke v16 *Klasse Zusammensetzung Verwirrung

ich diesen Fehler, und ich kann nicht herausfinden, wie es schien das Problem zu sein:

Person.cpp: 17: 62: Anmerkung: nicht übereinstimmen Typen 'const std :: basic_string < _CharT, _Traits, _Alloc>' und 'void' std :: cout < < "Geburtsdatum:" < < BirthdateObj.showBirthDate(); ^ Prozess mit Status beendet 1 (0 Minute (n), 0 Sekunden (s)) 1 Fehler (s), 0 Warnung (s) (0 Minute (n), 0 Sekunden (s))

Hier ist mein einfaches Programm:

Person.h

#ifndef PERSON_H 
#define PERSON_H 

#include <Birthdate.h> 

class Person 
{ 
    public: 
     Person(int age, Birthdate BirthdateObj); 
     virtual ~Person(); 

     void showPersonInformation(); 

    private: 
     int age; 
     Birthdate BirthdateObj; 
}; 

#endif // PERSON_H 

Person.cpp

#include "Person.h" 
#include <iostream> 

Person::Person(int age, Birthdate BirthdateObj) : age(age), BirthdateObj(BirthdateObj) 
{ 
    //ctor 
} 

Person::~Person() 
{ 
    //dtor 
} 

void Person::showPersonInformation() 
{ 
    std::cout << "Current age: " << age << std::endl; 
    std::cout << "Birthdate: " << BirthdateObj.showBirthDate(); 
} 

B irthdate.h

#ifndef BIRTHDATE_H 
#define BIRTHDATE_H 


class Birthdate 
{ 
    public: 
     Birthdate(int day, int month, int year); 
     virtual ~Birthdate(); 

     void showBirthDate(); 

    private: 
     int day, month, year; 
}; 

#endif // BIRTHDATE_H 

Birthdate.cpp

#include "Birthdate.h" 
#include <iostream> 

Birthdate::Birthdate(int day, int month, int year) : day(day), month(month), year(year) 
{ 
    //ctor 
} 

Birthdate::~Birthdate() 
{ 
    //dtor 
} 

void Birthdate::showBirthDate() 
{ 
    std::cout << day << "/" << month << "/" << year; 
} 

main.cpp

#include <iostream> 
#include "Birthdate.h" 
#include "Person.h" 

int main() 
{ 

    Birthdate BirthdateObj(7, 16, 1995); 
    //Birthdate *pBirthdateObj = &BirthdateObj; 

    Person PersonObj(20, BirthdateObj); 
    Person *pPersonObj = &PersonObj; 

    pPersonObj->showPersonInformation(); 
    //pBirthdateObj->showBirthDate(); 

    return 0; 
} 
+0

Sie scheinen einige Missverständnisse darüber zu haben, wie Funktionen und ihre Rückgabewerte funktionieren. Erwägen Sie, ein [großes Buch über C++] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) zu nehmen, um sicherzustellen, dass Sie nicht aus fragwürdigem Material lernen. –

+1

BirthdateObj.showBirthDate() gibt void zurück, das nicht an std :: cout übergeben werden kann. Übrigens, Sie können einfach PersonObj.showPersonInformation() aufrufen, oder? – stijn

+0

@stijn Hallo, ja ich habe es jetzt. Jedenfalls für mich (nur für mich oder vielleicht andere Leute), Zeiger auf ein Objekt und Zugriff auf sein Mitglied über -> ist schön lol. Nun, du könntest mir sagen, ob es eine schlechte Übung ist oder nicht. – Fur

Antwort

0

Ihre Geburtstags Funktion gibt void anstelle eines string. Da coutvoid nicht an die Standardausgabe ausgeben kann, kommt hier der Fehler von Ihnen. Ändern Sie diese Zeile:

std::cout << "Birthdate: " << BirthdateObj.showBirthDate(); 

zu:

std::cout << "Birthdate: "; 
BirthdateObj.showBirthDate(); 

Alternativ können Sie den Rückgabetyp von showBirthdate-string ändern und die obige Zeile zu halten, wie ist.

+0

Hallo vielen Dank, ich habe es jetzt herausgefunden. Hat es einen Begriff oder nicht? Ich werde Ihren Beitrag als Antwort wählen. – Fur

+0

Was meinst du mit * Begriff *? – PcAF

+0

@PcAF Gibt es eine Möglichkeit, dass ich kein Klassenobjekt erstellen muss und nur einen Zeiger daraus machen muss? – Fur