2017-10-22 23 views
-3

クラススタックに関係演算子==をオーバーロードする。同じ型のスタックが同じである。それ以外の場合はfalseです。ローカルテンポラリオブジェクトへの参照を戻すC++

私のコード:

template <class Type> 
const stackType<Type>& stackType<Type>::operator == 
(const stackType<Type>& otherStack) 
{ 
    if (this->stackTop != otherStack.stackTop) 
     return false; 
    for (int i = 0; i < stackTop; i++) 
     if (this->list[i] != otherStack.list[i]) 
      return false; 
    return true; 
} //end operator== 

私は地元の一時オブジェクトの警告を返すの参照を受けていると私は、関数のスコープが終了すると、それが破壊されるということです理解して何から。誰もがこの警告を解決する正しい方向に私を指摘することはできますか?

+2

ローカルの一時的な参照を返さないでください。 – Ron

+0

警告を避けるためにはしないでください...あなたはrefまたは属性(割り当てられたメモリ)を安全に返すことができます。 – fievel

+0

@fievelなぜ何かを割り当てるのですか?質問者は明らかにブールを返す必要があり、戻り値のタイプをねじ込みます。 – user4581301

答えて

2

const stackType<Type>&、btを返すように宣言している場合は、trueまたはfalseを返します。コンパイラはtruefalseconst stackType<Type>&に変換して返します。それはおそらくあなたが意図したものではなく、boolを返すと宣言します。

変換が機能したとしても、参照はローカル変数に与えられ、UBが与えられます。

+0

正解、それはブールになることを意図していたが、私はまだ地元の気温に戻ってくる。私はどうすれば地元の一時所に戻らないのですか? – noslov

+1

'bool&'を返すように定義しましたか?基本データ型では決してしないでください。それ以外の場合は、エラーはコード内の他の場所から発生している必要があります。 – Aganju