0

私はテンプレートベースのプログラミングに慣れていないので、プロジェクトをコンパイルするときにこのエラーが発生します

error : multiple definition of Expr::Chapter_2<double>::get_pointer() 
objectfile.o:/Filename.h:42 first defined here.

指定されたコードは完全に .h ヘッダー ファイル内にあります。この問題を解決するための指針は非常に高く評価されています。

コード:

template< typename T >
class Chapter_2{

-------
public :
    inline T* get_pointer();
-------
};

// Function definitions
template< typename T >
T* Chapter_2<T>::get_pointer() {
    ------code------
}

// double specialization of template
template<>
double* Chapter_2<double>::get_pointer() {
    ------code------
}
4

1 に答える 1

0

考えられる理由:

1)ヘッダーが#ifndefで始まっておらず、同じヘッダーが2 回以上含まれている場合。

2)テンプレートを含むヘッダーをインクルードするcppファイルで、再度メソッドを定義した場合 (つまり、cpp と .h で複数の定義)。テンプレート内のメソッドの実装は、一度同じ場所で定義する必要があります。

于 2013-07-15T04:54:45.593 に答える