2016-04-11 8 views
0

Ich versuche gerade, eine Doubly Linked List für eine Data Structures-Klasse zu implementieren.C++, Instanziieren eines generischen Knotens, der eine Instanz eines Objekts mit Hilfe von Templates speichert

Ich habe derzeit eine generische Node * -Klasse implementiert und wollte eine Instanz einer anderen Klasse Student (int i, int j) halten, die ich implementiert habe.

Das ist, was ich bin versucht, in meiner Haupt-Methode zu tun:

Student student1 = Student(10,11); 
Node<Student()> node1 = Node<Student()> (student1); 

Dies ist der Fehler Ich erhalte. Alles funktionierte absolut gut, wenn der Knoten einen primitiven Datentyp wie einen int enthielt, aber ich bin nicht sicher, wie man den Unterschied zwischen dem Speichern eines int und dem Speichern eines Student-Objekts berücksichtigen kann.

Ich würde jede Einsicht lieben oder in die richtige Richtung drücken. Danke.

enter image description here

Hier ist meine Implementierung von Knoten.

#ifndef NODE_H 
#define NODE_H 

template <class T> 
class Node 
{ 
    public: 
    Node(); 
    Node(T k); 
    virtual~Node(); 

    T key; 
    Node<T>* prev; 
    Node<T>* next; 
}; 
#endif 

//default constructor 
template <class T> 
Node<T>::Node() 
{ 
    prev = NULL; 
    next = NULL; 
} 

template <class T> 
Node<T>::Node(T k) 
{ 
    prev = NULL; 
    next = NULL; 
    key = k; 
} 

template<class T> 
Node<T>::~Node() 
{ 
//implement 
} 

Student.cpp

#include "Student.h" 

Student::Student() 
{ 
    mArrivalTime = 0; 
    mTimeNeeded = 0; 
} 
Student::Student(int arrivalTime, int timeNeeded) 
{ 
    mArrivalTime = arrivalTime; 
    mTimeNeeded = timeNeeded; 
} 

Student::~Student() 
{ 
    //implement 
} 

int Student::getArrivalTime() 
{ 
    return mArrivalTime; 
} 

int Student::getTimeNeeded() 
{ 
    return mTimeNeeded; 
} 

Student.h

#ifndef STUDENT_H 
#define STUDENT_H 

using namespace std; 
class Student 
{ 
    private: 
     int mArrivalTime; 
     int mTimeNeeded; 

    public: 
     Student(); 
     Student(int arrivalTime, int timeNeeded); 
     ~Student(); 
     int getArrivalTime(); 
     int getTimeNeeded(); 
}; 
#endif 

Antwort

3

nicht verwenden(), um nur die Klassennamen verwenden. zB:

Node<Student> node1 = Node<Student> (student1); 
+0

Ich war neugierig, ob dies funktionieren würde, aber wenn ich erhalte ich diese Fehlermeldung: Nicht definierte Symbole für Architektur x86_64: „Student :: Student (int, int)“, verweisen von: _main in Assignment4-1de395.o "Student :: Student()", referenziert von: Knoten :: Knoten (Student) in Assignment4-1de395.o "Student :: ~ Student()", referenziert von: _main in Assignment4-1de395.o Knoten :: ~ Node() in Assignment4-1de395.o ld: Symbol (e) nicht für die Architektur gefunden x86_64 clang: error: linker com Der Befehl ist mit dem Beendigungscode 1 fehlgeschlagen. (Verwenden Sie -v, um den Aufruf anzuzeigen.) –

+0

Das ist ein Linkfehler, der wahrscheinlich bedeutet, dass der Kompilierungsschritt funktioniert hat. Ich würde vermuten, dass Sie Student.cpp zu Ihrer 'g ++' -Befehlszeile hinzufügen müssen, damit es mit Ihrer Hauptcpp-Datei verknüpft wird. –

+0

Siehe http://stackoverflow.com/questions/3202136/using-g-to-compile-multiple-cpp-and-h-files für weitere Informationen –

Verwandte Themen