我试图覆盖<<
运算符,但编译器似乎无法识别我的实现,而是试图将其解释为位移。我已经尝试过使用参数类型 ( 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> *'
如果我将作用于类的相同运算符定义为值,它就可以工作......