<<
演算子をオーバーライドしようとしていますが、コンパイラが実装を認識せず、代わりにビットシフトとして解釈しようとしているようです。 私は既にパラメータタイプ(const T&
、T&
、T
、const T
)を使用して遊んでいませんでした。オーバーライドされた<<演算子が認識されない
#pragma once
template<typename T> class AbstractStack
{
public:
virtual bool Push(const T &) = 0;
}
template <typename T> class ArrayStack : public AbstractStack <T>
{
public:
bool Push(const T&) {
....
}
}
template <typename T> bool operator<<(const AbstractStack<T>* &, const T&) {
return stack->Push(item);
}
int main() {
AbstractStack<int> *stack = new ArrayStack<int>(5);
int a = 2;
stack << a; // <<-- compiler error
return 0;
}
報告されたエラーがある:
Error (active) expression must have integral or unscoped enum type Lab10
Error C2296 '<<': illegal, left operand has type 'AbstractStack<int> *'
私は値としてクラスに作用する同じ演算子を定義した場合、それだけで動作します...
少なくとも1つのクラスタイプのオブジェクトで演算子をオーバーロードすることができます。 1つの引数にはポインタがあり、もう1つの引数は整数です。 – 0x499602D2
ArrayStackのメンバー関数としてオペレータを宣言する – Ripi2
これを見てください:http://stackoverflow.com/questions/6171630/why-isnt-operator-overloading-for-pointers-allowed-to-work – NPE