このような質問が以前に尋ねられても、私はどれくらい検索してもわかりませんでした(同様の質問がありましたが、 )。テンプレートクラスの既存の定義に関数定義を一致させることができません
私はテンプレートクラスを作成していますが、演算子+をオーバーロードしようとする場合を除いてすべて正常に動作します。私は異なるパラメータのために演算子+ 2回オーバーロードしようとしますが、コンパイラは定義の1つを見ず、エラーを出します。ここでは、コードです:
Worker.h(参照する方が簡単ですので、私&過去の宿題の一つが、ここで問題を実装):
#ifndef _WORKER_H
#define _WORKER_H
#include <string>
#include "Project.h"
using namespace std;
template <class T>
class Worker {
public:
Worker(const string &, Project &);
void Work(const int &);
const Worker & Worker::operator+(const int &); //Problem
const Worker & Worker::operator+(const string &); //Problem
string getName() const;
int getTime() const;
private:
string myName; //The name of the worker
Project & myProject;
int myTime; //Variable to keep track of how much the worker worked.
};
#include "Worker.cpp"
#endif
とWorker.cppの関連部分:
template <class T>
const Worker<T> & Worker<T>::operator+(const int & add)
{
cout << add;
return *this;
}
template <class T>
const Worker<T> & Worker<T>::operator+(const string & add)
{
cout << add;
return *this;
}
+
演算子は現在何もしていませんが、問題はコンパイラが最初に宣言された関数(この場合はパラメータをintとします)だけを見ていることです。一度だけオーバーロードしようとすると、両方ともうまく動作するため、機能に問題はないようです。また、テンプレート化されていないクラスでそれらを使用することもできます(必要な変更を加えます)。
私はそれが何かシンプルだと思うが、私はテンプレートが初めてなので、問題の内容を理解できなかった。
あなたの問題である1そのうちここ
手元の問題に必ずしも関連しているわけではなく、.cppファイルをヘッダーに含めないでください。cppファイル – Attila
オペレータがどのようにクラスを使用しているか、コンパイラが提供するエラーについてのコードを提供できますか? – Attila
@Attilaこれは本当に悪いことですが、使用する前にすべての関数のコードを含め、テンプレートを完全に定義しなければなりません。これは、関数コードが何とかヘッダーファイルに現れるはずであることを意味します。 典型的な方法は、インラインファイル、.inlを使用してこれを明確にすることです。 –