2014-11-17 51 views
0

我試圖實現一個名爲Person的類,該成員由成員組成:名稱,性別和廣告,其中的類名爲Address由會員街道,電話和PObox組成。當我編譯程序時,每當我嘗試在任何Person實現內部調用廣告時(儘管語法應該是正確的),我都會得到一個錯誤。我附加了address.h,person.h,Person的實現和Address文件的實現。C++類查詢錯誤:「」的左邊必須指向類/結構體/ union

address.h

#include<iostream> 
class Address 
{ 
public: 
    Address(); 
    char* getstreet(); 
    char* gettel(); 
    int getpobox(); 
    void setall(char *str , char *tel , int pobox); 
    void print(); 
    /*~Address();*/ 

private: 
    char* street; 
    char* tel; 
    int POBox; 
}; 

person.h

#include <iostream> 
#include "address.h" // header file for the Address class 
#include "gender.h" // header file for the Gender enum 
using namespace std; 
class Person 
{ 
    public: 
    Person(); 
    Person(char *n, Gender *g, Address *ad); 
    Person(const Person &f); 
    void setName(char * n); 
    void setAds(Address *ad); 
    char *getName(); 
    /*Address *getAds();*/ 
    /*~Person();*/ 
    void print(); 

private: 
    char *name; 
    Gender *gender; 
    Address *ads; 
}; 

實施2.cpp

#include<iostream> 
#ifndef address_h 
#define address_h 
#include"address.h" 
using namespace std; 
//IMPLEMENTATION OF ADDRESS FUNCTIONS 

Address::Address() 
    { 
     street = "default street"; 
     tel = "55555555"; 
     POBox = 1315425; 
    } 
    char* Address::getstreet() 
    { 
     return street; 
    } 
    char* Address::gettel() 
    { 
     return tel; 
    } 
    int Address::getpobox() 
    { 
     return POBox; 
    } 
    void Address::setall(char *str , char *tel2 , int pobox) 
    { 
    street = str; 
    tel = tel2; 
    POBox = pobox; 
    } 
    void Address::print() 
    { 
     cout<<"Street : "<<street<<endl; 
     cout<<"Telephone : "<<tel<<endl; 
     cout<<"PO box : "<<POBox<<endl; 
    } 

#endif 

Implementation.cpp

#ifndef person_h 
#define person_h 
#include<string> 
#include<iostream> 
#include"address.h" 
#include"person.h" 
using namespace std; 
    //IMPLEMENTATION OF PERSON FUNCTIONS 
    Person::Person() 
    { 
     (*gender) = female; 
     name = "testname"; 
     (*ads).setall("random adress","0503216532",95421); 
    } 
    Person::Person(char *n, Gender *g, Address *ad) //copy constructor 
    { 
     n = name; 
     g = gender; 
     ad->setall("cpyconstruct test","42324134",14925); 
    } 
    Person::Person(const Person &f) 
    { 
     name = f.name; 
     gender = f.gender; 
     ads = f.ads; 
    } 
    void Person:: setName(char * n) 
    { 
     n = "karim (TESTING SETNAME)"; 
    } 
    void Person::setAds(Address *ad) 
    { 
     ads->setall("aus","04314013",14314); 
    } 
    char* Person::getName() 
    { 
     return name; 
    } 
    void Person:: print() 
    { 
     cout<<"Name : "<<name<<endl; 
     if(gender == 0) 
     { 
     cout<<"gender : male"<<endl; 
     } 
     else 
     cout<<"gender : female"<<endl; 
     ads->setall("hello","056323453",1995); 
    } 

#endif 
+0

錯誤說這是在哪一行? –

+0

所有我嘗試做廣告的線路 –

+2

您*真的*需要使用'std :: string'!否則,你應該使用'char []'或用'new'分配(但是使用'std :: string'!) – crashmstr

回答

0

廣告是一個未初始化的指針,所以你不能用它做任何事情(比如,通過使用 - >運算符)。

解決方法:用新的人的ctor初始化;或者更好的是,根本不使用指針。你不需要一個。

class Person 
{ 
    ... 
    Address ads; 
}; 

Person::Person() 
{ 
    (*gender) = female; 
    name = "testname"; 
    ads.setall("random adress","0503216532",95421); 
} 

...和crashmaster的權利:當你ads工作,你會得到與地址的成員內存問題。使用std :: string,他們也會被照顧。

相關問題