2

さて、Stack Overflowでこの質問の複数のインスタンスを読みましたが、私のプロジェクトに関連する答えが見つからないようです。 左利きのオペランドを取るbinary-no-operatorが見つかりました

このプログラムが作成された2つのオブジェクトファイル間ではなく、たとえば2つのintで等式演算子を使用できる理由がわからないようです。
これがクラスからの抜粋です:

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を追加しましたが、引数を追加しましたが、何も追加しませんでした。2つのintで等式演算子をテストしたところ、コンパイルされて機能しました。繰り返しますが、私は自分の混乱から学びたいので、すべての入力を歓迎します。

4

1 に答える 1

1

このコードは、空のクラスとして定義した場合に機能しますpublic stackADT<Type>。これは、おそらくそこにあるべきではないこと、またはコードに他の奇妙な点があることを意味します。

構文に関して:(const stackType<Type & right) constあなたはを逃しました>。また、ある時点でスペルを間違えstackTopましstacKTopた。

于 2012-10-08T23:21:42.133 に答える