2010-04-20 6 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. 
} 

Также вы не что делает поле nextnewNodeNULL:

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

Также это хорошая практика для освобождения динамически распределенной памяти. Таким образом, вместо пустого деструктора

~TCSGraph(); 

Вы можете выслать список в dtor.

EDIT: Другие ошибки

Вы отсутствующий; после объявления класса:

class TCSGraph{ 
...... 

}; // <--- add this ; 

Также объявлен только ваш деструктор. Нет определения. Если вы не хотите давать какие-либо определения, у вас должно быть хотя бы пустое тело. Так заменить

~TCSGraph(); 

с

~TCSGraph(){} 
+0

о моих ошибках>< но это все та же ошибка я перед вот этими сообщения об ошибках: > Ошибка: новые типы не может быть определены в возвращаемом типе> два или больше типов данных в объявлении 'AddVertex» | > для 'TCSGraph TCSGraph :: addVertex (int) 'не соответствует ни одному в классе' TCSGraph' | > ошибка: кандидат: void TCSGraph :: addVertex (int) | > Ошибка: 'TCSGraph TCSGraph :: addVertex (int) 'и' void TCSGraph :: addVertex (int)' не может быть перегружен – sum1needhelp