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