<<
연산자를 재정의하려고하는데 컴파일러가 내 구현을 인식하지 못하고 대신 비트 시프트로 해석하려고합니다. 나는 매개 변수 유형 (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> *'
나는 값으로 클래스에 작용하는 같은 연산자를 그냥 작동 ... 정의하면
적어도 하나의 클래스 유형의 객체 만 사용하여 연산자를 오버로드 할 수 있습니다. 하나의 인수에 대해 포인터가 있고 다른 인수는 정수입니다. – 0x499602D2
ArrayStack의 멤버 함수로 연산자를 선언하십시오. – Ripi2
다음을보십시오. http://stackoverflow.com/questions/6171630/why-isnt-operator-overloading-for-pointers-allowed-to-work – NPE