2017-09-05 43 views
-2
#include <iostream> 
#include <cstdlib> 
#include <cstdio> 
#include <string> 

using namespace std; 

class car{ 
    private: 
    string color; 
    int mileage; 
    int topSpeed; 
    int numGears; 
    public: 
}; 

class carNode{ 
    private: 
    car Car; 
    carNode *next; 
    friend class carLinkedlist; 
}; 

class carLinkedlist{ 
    public: 
    carLinkedlist(); 
    ~carLinkedlist(); 
    bool empty() const; 
    void addtolist(const car& theCar); 
    const carNode* getHead(); 
    private: 
    carNode* head; 
}; 

const carNode* carLinkedlist::getHead(){ 
    return head; 
} 

void car::setDetails(const string color,const int mileage,const int topSpeed,const int numGears){ 
    this->color = color; 
    this->mileage = mileage; 
    this->topSpeed = topSpeed; 
    this->numGears = numGears; 
} 

carLinkedlist::carLinkedlist(){ 
    head = NULL; 
} 

carLinkedlist::~carLinkedlist(){ 
    // what to do here 
} 

bool carLinkedlist::empty() const{ 
    if (head==NULL) 
     return true; 
    return false; 
} 

void carLinkedlist::addtolist(const car& theCar){ 
    if (empty()){ 
     head = new carNode; 
     head->Car = theCar; 
     head->next = NULL; 
    } 
    else{ 
     carNode* temp = new carNode; 
     temp->Car = theCar; 
     temp->next = NULL; 
     head->next = temp; 
    } 
} 

int main(){ 
    car car1; 
    car1.setDetails("red",40,140,5); 
    const car& carr1 = car1; 
    car car2; 
    car2.setDetails("black",30,220,5); 
    const car& carr2 = car2; 
    carLinkedlist carList; 
    carList.addtolist(carr1); 
    carList.addtolist(carr2); 
    //cout << car1.getColor() << endl; 
    cout << (carList.getHead())->next->Car.getColor() << endl; 
    return 0; 
} 

此代碼在下一行中拋出錯誤,並且下一行和Car都是私有的。我可以使用getCar函數來訪問Car的值,但是對於受保護的下一步該怎麼做,我如何訪問它的值。如何訪問鏈接列表中的下一個C++

P.S.我做了一個類似的理由getHead函數,即訪問頭,但我不能訪問下一個通過功能'因爲那麼會有next-> next保護。 也請驗證我是否應該做一個getCar函數或做別的事情。

+1

爲什麼你不只是如果你想要一個鏈表數據結構使用'的std :: list'? (提示:'std :: vector'通常會勝過它)。 –

+0

@jesper因爲我必須實現我自己的鏈表 –

+0

要使這種類型的代碼可靠地工作,最好先編寫一些單元測試,然後逐步驗證功能,然後才能使用它。 – tadman

回答

0

一個解決方案是使next成員public

另一種解決方案是增加內部carNode一個link_to功能:

class carNode 
{ 
    public: 
    void link_to(carNode& cn) 
    { 
     next = &cn; 
    } 
    private: 
    //... 
};