2017-04-02 51 views
0

我有一个小问题..我想做汽车注册,我想拥有所有者(指向一个Person对象的指针),但是当我想带所有者获取函数我不能那样做......这对我来说是神秘......也许我有一点点失误的地方,我无法找到它。请帮助:)指针tho另一个对象

class Person 
{ 
    friend class Cars; 
public: 
    Person(){} 
    Person(uint8_t age, string name) :m_age(age), m_name(name) 
    { 
     m_idGener = s_idGenerator++; 
    } 

    int getId() 
    { 
     return m_idGener; 
    } 
    uint8_t getAge() 
    { 
     return m_age; 
    } 
    string getName() 
    { 
    return m_name; 
    } 
private: 
    string m_name; 
    uint8_t m_age; 
    static int s_idGenerator; 
    int m_idGener; 

}; 
class Cars:public Person 
{ 

public: 
    Person *m_owner; // this is my pointer which i want to point to cars  Object 
    it will stay public for the test after the test i will move it in the  private section 
    Cars() 
    { 
    } 
    // getters and setters 

    Cars setOwner(Cars &object, Person &owner) // with this function i set the owner 
    { 
     object.m_owner = &owner; 
    } 
    Cars getOwner(Cars &object) /// here is my problem i can't take the owner 
    { 
     return *(object.m_owner); // but i can't take the owner 
    } 

    uint16_t getHorsePower() 
    { 
     return horsePower; 
    } 
    string getRegNumber() 
    { 
     return registrationNumber; 
    } 
    private: 
    string m_manufacturerName; 
    string modelName; 
    uint16_t horsePower; 
    string registrationNumber; 

}; 

int Person::s_idGenerator = 0; 

回答

1

你犯了更多的错误。至少应该纠正以下几点:

Cars setOwner(Cars &object, ..... 

这个方法doest没有返回值,所以应该是void。汽车对象应该是调用方法的对象,而不是参数。

Cars getOwner(Cars &object) /// here is my problem i can't take the owner 
{ 
    return *(object.m_owner); // but i can't take the owner 
} 

在这种方法我将返回类型更改为Person *,然后简单地返回m_owner。参数是不需要的。

修改过的工作例如:

#include <string> 
#include <iostream> 
using namespace std; 
class Person 
{ 
    friend class Cars; 
public: 
    Person(){} 
    Person(uint8_t age, string name) :m_age(age), m_name(name) 
    { 
     m_idGener = s_idGenerator++; 
    } 

    int getId() 
    { 
     return m_idGener; 
    } 
    uint8_t getAge() 
    { 
     return m_age; 
    } 
    string getName() 
    { 
    return m_name; 
    } 
private: 
    string m_name; 
    uint8_t m_age; 
    static int s_idGenerator; 
    int m_idGener; 

}; 
class Cars:public Person 
{ 

public: 
    Person *m_owner; // this is my pointer which i want to point to cars  Object 
         // it will stay public for the test after the test i will move it in the  private section 
    Cars() 
    { 
    } 
    // getters and setters 

    void setOwner(Person &owner) // with this function i set the owner 
    { 
     m_owner = &owner; 
    } 
    Person *getOwner() /// here is my problem i can't take the owner 
    { 
     return (m_owner); // but i can't take the owner 
    } 

    uint16_t getHorsePower() 
    { 
     return horsePower; 
    } 
    string getRegNumber() 
    { 
     return registrationNumber; 
    } 
    private: 
    string m_manufacturerName; 
    string modelName; 
    uint16_t horsePower; 
    string registrationNumber; 

}; 

int Person::s_idGenerator = 0; 

int main() { 
    Person p(5,"Bill"); 
    Cars c; 

    c.setOwner(p); 
    cout << c.getOwner()->getName(); 
} 
+0

非常感谢你我是初学者,现在我正在学习代码:) –

+0

欢迎您。如果它对你有帮助,你可以考虑upvote。 – quantummind

0

这里:

Cars setOwner(Cars &object, Person &owner) // with this function i set the owner 
{ 
object.m_owner = &owner; 
} 

你声明超值类型为“汽车”,但你不会返回任何东西。

在这里:

Cars getOwner(Cars &object) /// here is my problem i can't take the owner 
{ 
return *(object.m_owner); // but i can't take the owner 
} 

你想回到“人”对象,但你又声明了价值类型为“汽车总动员”。

所以,你可以改变这种功能像:

第一:

void setOwner(Cars &object, Person &owner); 

二:

Person getOwner(Cars &object);