2017-05-24 18 views
2

私の大学で課題があります。私の仕事は、与えられたクラスの実装で2つのヘッダファイルを完成させることです。これらのヘッダーファイルは、単体テストによってテストされ、ヘッダーファイルのみがテストされるため、実装することが重要です。ヘッダーファイル内のクラス宣言と実装

のは、私はこのの.hファイルがあるとしましょう:

#pragma once 

template<class T> 
class RareVector; 

template<class T> 
class Vector 
{ 
public: 
Vector(){} 
Vector(int dim); 
Vector(T *t, int dim); 
Vector(const Vector&); 
~ Vector(); 

Vector operator+(const Vector&); 
Vector operator-(const Vector&); 
double operator*(const Vector&); 
double operator~(); 
double operator%(const Vector&); 
T  operator[](int) const; 
operator RareVector<T>(); 

private: 
T* m_t; 
int m_dim; 
}; 

私の質問ですが:これらのクラスを実装するための唯一の場所は、宣言である、または私は下のこのどこかのような何かを行うことができます:

template <class T> 
Vector<T>::Vector(){ 
// code goes here 
} 
+1

10行目の独自の例に従います –

+0

これは唯一の方法ですか?そうではありませんか? –

+0

これは意味をなさない唯一の場所です。後で2番目のコードブロックのように定義して、それ以前に宣言されていたものの定義されていないものを定義している場合、これは基本的には別のソースファイルそれ以外の場所に含まれていれば、複数のソースファイルに含まれていればコンパイラはこのファイルをヘッダーに入れると、複数の定義が表示されるため、コンパイラはそれに苦情を言います。クラス内で定義すると、 –

答えて

1
あなたは宣言の外で機能を実装するためにインラインで使用することができます

...

template<class T> 
class Vector 
{ 
public: 
Vector(){} 
Vector(int dim); 
inline Vector(T *t, int dim); 
Vector(const Vector&); 
~ Vector(); 

Vector operator+(const Vector&); 
... 
}; 


template<class T> 
inline Vector::Vector(T *t, int dim) 
{ 
} 
関連する問題