好的,我已经在Stack Overflow上阅读了这个问题的多个实例,但我似乎无法找到与我的项目相关的答案。 binary-no-operator found which takes left handed operand
我似乎无法弄清楚为什么我可以在说2个整数上使用相等运算符但不能在为该程序编写的两个目标文件之间使用。
这是课堂上的一个片段:
template <class Type>
class stackType: public stackADT<Type>
{
public:
const stackType<Type>& operator=(const stackType<Type>&);
stackType(const stackType<Type>& otherStack);
~stackType();
bool operator== (const stackType<Type>&) const;
private:
int maxStackSize; //variable to store the maximum stack size
int stackTop; //variable to point to the top of the stack
Type *list; //pointer to the array that holds the stack elements
};
template<class Type>
bool stackType<Type>::operator==(const stackType<Type & right) const
{
//assuem the stacks have same number of elements
if(this->stacKTop != right.stackTop)
return false;
//check for eqaulity
for (int i=0; i<stackTop; i++)
if (this->list[i] != right.list[i])
return false;
return true;
}//end operator function
要测试的主程序:
using namespace std;
int main()
{
stackType<int> s1(12);
stackType<int>s2(15);
for (int i=3; i<30; i+=3)
{
s1.push(i);
s2.push(i);
}//end for
if(s1 == s2)
cout<<"both stacks are equal"<<endl;
else
cout<<"stacks are not equal"<<endl;
}
我正在使用2012年的visual studio,我只是感到困惑和疲惫不堪。我已经尝试更改声明我已经添加了关键字const到声明,我添加了更多的参数,没有。我在两个整数上测试了相等运算符,并编译和工作。我想再次从困境中吸取教训,欢迎所有的意见。
答案 0 :(得分:1)
如果您将public stackADT<Type>
定义为空类,则代码可以工作,这意味着可能不应该存在,或者您对代码有其他一些了解。
语法:(const stackType<Type & right) const
你错过了>
。另外,您一度拼错stackTop
stacKTop
。