以前にそのような質問があった場合は申し訳ありませんが、いくら検索しても見つかりませんでした(同様の質問がありましたが、どれも私には当てはまらなかったようです)。
テンプレート化されたクラスを作成していますが、operator+ をオーバーロードしようとする場合を除いて、すべて正常に動作します。異なるパラメーターに対して operator+ を 2 回オーバーロードしようとしましたが、コンパイラーは定義の 1 つを認識せず、エラーを返します。コードは次のとおりです。
Worker.h (以前の宿題の 1 つで、見やすいのでここで問題を実装しました):
#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 を使用) しか認識しないことです。また、一度だけオーバーロードしようとすると、両方とも単独で正常に動作するため、関数に問題はないようです。また、テンプレート化されていないクラスでそれらを (必要な変更を加えて) 使用することもできます。
簡単なことだと思いますが、テンプレートに慣れていないので、何が問題なのかわかりませんでした。