2010-04-20 62 views
2
#include<iostream> 

using namespace std; 

class TCSGraph{ 
    public: 
     void addVertex(int vertex); 
     void display(); 
     TCSGraph(){ 

      head = NULL; 
     } 
     ~TCSGraph(); 

    private: 
     struct ListNode 
     { 
      string name; 
      struct ListNode *next; 
     }; 

     ListNode *head; 
} 

void TCSGraph::addVertex(int vertex){ 
    ListNode *newNode; 
    ListNode *nodePtr; 
    string vName; 

    for(int i = 0; i < vertex ; i++){ 
     cout << "what is the name of the vertex"<< endl; 
     cin >> vName; 
     newNode = new ListNode; 
     newNode->name = vName; 

     if (!head) 
     head = newNode; 
     else 
     nodePtr = head; 
     while(nodePtr->next) 
     nodePtr = nodePtr->next; 

     nodePtr->next = newNode; 

    } 
} 

void TCSGraph::display(){ 
    ListNode *nodePtr; 
    nodePtr = head; 

    while(nodePtr){ 
    cout << nodePtr->name<< endl; 
    nodePtr = nodePtr->next; 
    } 
} 

int main(){ 
int vertex; 

cout << " how many vertex u wan to add" << endl; 
cin >> vertex; 

TCSGraph g; 
g.addVertex(vertex); 
g.display(); 

return 0; 
} 

回答

2

有一個問題,您addvertex方法:

您有:

if (!head) 
    head = newNode; 
else 
nodePtr = head; 
while(nodePtr->next) 
nodePtr = nodePtr->next; 
nodePtr->next = newNode; 

,但它應該是:

if (!head) // check if the list is empty. 
    head = newNode;// if yes..make the new node the first node. 
else { // list exits. 
    nodePtr = head; 
    while(nodePtr->next) // keep moving till the end of the list. 
     nodePtr = nodePtr->next; 
    nodePtr->next = newNode; // add new node to the end. 
} 

而且你是不是使newNodeNULLnext字段爲:

newNode = new ListNode; 
newNode->name = vName; 
newNode->next= NULL; // add this. 

另外它是一個很好的實踐來釋放動態分配的內存。因此,而不是有一個空的析構函數

~TCSGraph(); 

你可以釋放列表中的dtor。

編輯:更多的錯誤

你有一個丟失;類聲明後:

class TCSGraph{ 
...... 

}; // <--- add this ; 

此外您的析構函數僅聲明。沒有def。如果你不想給任何def,你至少必須有一個空的身體。因此,與

~TCSGraph(){} 
+0

哦,我的錯誤>< 但我仍面臨 這裏同樣的錯誤是這些錯誤消息: >錯誤:新的類型可能無法在返回類型中'addVertex」的聲明來定義>兩個或多個數據類型| >「TCSGraph TCSGraph :: addVertex(int)'的原型與'TCSGraph'類中的任何一個都不匹配。 > error:candidate is:void TCSGraph :: addVertex(int)| > error:'TCSGraph TCSGraph :: addVertex(int)'和'void TCSGraph :: addVertex(int)'不能被重載 – sum1needhelp 2010-04-20 06:07:33