2

好的,所以我在 Stack Overflow 上阅读了这个问题的多个实例,但我似乎找不到与我的项目相关的答案。 找到采用左手操作数的二进制无运算符

我似乎无法弄清楚为什么我可以在说 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;
}

我正在使用 Visual Studio 2012,我只是感到困惑和筋疲力尽。我尝试更改声明我已将关键字 const 添加到声明中,我添加了更多参数,什么都没有。我在两个整数上测试了相等运算符,它编译并工作。再次,我想从我的混乱中学习,所以欢迎所有输入。

4

1 回答 1

1

如果您将代码定义public stackADT<Type>为一个空类,则该代码可以工作,这意味着它可能不应该存在,或者您对代码有一些其他的奇怪之处。

至于语法:在(const stackType<Type & right) const你错过了一个>. stackTop此外,您在stacKTop某一时刻拼写错误。

于 2012-10-08T23:21:42.133 回答