理解できない C++ コンパイラ エラーが発生し、修正方法や説明を見つけることができませんでした。問題を示すコード スニペットを次に示します。
#include <iostream>
template<class T>
class A {
public:
A(int n) {data = new T[n]; }
const T &operator()(int i) const {return data[i];}
protected:
T *data;
};
template<class T>
class B : public A<T> {
public:
B(int n) : A<T>(n) {}
T &operator()(int i) {return this->data[i]; }
//const T &operator()(int i) const {return this->data[i];} // fixes problem
};
template<class T, int N>
class C : public B<T> {
public:
C() : B<T>(N) {}
private:
};
template<class T>
void doOp(const T &v) {
std::cout << v(0) << std::endl;
}
void templateTest()
{
C<double, 3> c;
c(0) = 5;
std::cout << c(0) << std::endl;
doOp(c);
}
クラス B の行のコメントを外すと、コードは正しくコンパイルおよび実行されますが、クラス B でのこの演算子関数の定義がクラス A での定義と異なる理由がわかりません。
助けてくれてありがとう。
明細書