2016-04-11 15 views
0

現在、データ構造クラスの二重リンクリストを実装しようとしています。テンプレートを使用してオブジェクトのインスタンスを格納する一般的なノードをインスタンス化する

私は現在汎用Nodeクラスを実装しており、実装した別のクラスStudent(int i、int j)のインスタンスを保持したいと考えています。

これは私が私の主な方法で行うことをしようとしていますものです:

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

これは私が受けていますエラーです。 ノードはintのようなプリミティブなデータ型を保持していたが、intの格納とStudentオブジェクトの格納の違いをどのように説明するのかは分かりません。

私は洞察力が大好きで、正しい方向に押し込んでいます。 ありがとうございます。ここで

enter image description here

ノードの私の実装です。

#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 

答えて

3

(使用しないでください)、単にクラス名を使用します。例えば:

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

これがうまくいくかどうかはするとして興味があったが、私は、私はこのエラーが表示さないとき: :から参照、 「学生::学生(int型、int型)」:アーキテクチャx86_64版のための未定義シンボルを_main Assignment4-1de395.o "Student :: Student()"、参照元: ノード ::ノード(Student)in Assignment4-1de395.o "Student ::〜Student()"、参照先: _main in Assignment4-1de395.o ノード ::〜Node()in Assignment4-1de395.o ld:アーキテクチャx86_64のシンボルが見つかりません clang:error:linker comコマンドコード1でmandが失敗しました(呼び出しに-vを使用) –

+0

これはリンカーエラーです。これは、おそらくコンパイルステップが機能していることを意味します。 Student.cppを 'g ++'コマンドラインに追加する必要があるので、メインの.cppファイルにリンクされているはずです。 –

+0

詳細についてはhttp://stackoverflow.com/questions/3202136/using-g-to-compile-multiple-cpp-and-h-filesを参照してください –

関連する問題