2016-10-16 18 views
2

私はクラスメンバ関数から別のメンバ関数にconstパラメータを渡すには?

class Foo : Bar { 
public: 
virtual bool function1(const Card &arg1) const{ 
    function2(arg1); 
} 
virtual void function2(const Card &anotherArg) { 
    /* Do stuff with private member variables*/ 
} 
private: 
.... 
}; 

"カード" を持っているがクラス型です。私はエラーが発生しています "メンバ変数関数 'function2'は実行可能ではありません: 'this'引数の型は 'const Simple'ですが、関数はconstとマークされていません。

私は問題が何であるかについてはあまりよく分かりません。 function2はconstを引数の1つとして取っているので、arg1が変更されないのでconstであるべきではない。また、私はこれをやってみました:

function2(arg1) const; 

でも動作しません。

+0

このコンパイラ・エラーがあなたのコード例では不可能です。 – tkausl

+0

それは変です。私はXCodeを使用していて、赤い線が強調表示されています。私は無関係であると思う私のコードのかなりの部分を省いた。たぶん問題を引き起こしているのは欠けている部分でしょうか? – Goldname

+0

あなたとは無関係であるとは無関係ではないかもしれません。 "const&arg1"は有効なC++コードではありません。無関係の情報は削除しても問題ありませんが、有効なC++コードで終了する必要があります。 –

答えて

2

ここに示した例では、function1()constメソッドです。 constメソッドは、他のconstメソッドを呼び出すことしかできません。 function2()constメソッドではありません。

これは、各メソッドの実際のパラメータとは関係ありません。

+0

私はfunction2を呼び出すことができますか? – Goldname

+0

'const'関数そのものにしてください。 –

+0

privateメンバー変数を編集するためにfunction2が必要なので、私はできません – Goldname

1

constこれはconstを呼び出すことができますが、これは両方を呼び出すことができます。 あなたのコードではconst以外のconst thisをthisと呼んでいます:関数oneはconstですが、関数2は非constです。したがってこれはエラーです。

  • ただし、関数2は関数を呼び出すことができます。

はあなたの例を修正するには:

class Foo : Bar 
{ 
    public: 
     virtual bool function1(const Card &arg1) const 
     { 
      function2(&arg1); 
     } 
     virtual void function2(const Card &anotherArg)const 
     { 
      /* Do stuff with private member variables*/ 
     } 
    private: 
.... 
}; 
+0

function2をconstにした場合の問題は、プライベートメンバ変数なので、私はそれをconstにすることはできませんが、私はまだfunction2を呼び出したいと思います。 – Goldname

+0

例えば、関数2を非constに変更したい場合はメンバデータを変更し、関数2 nからの1あなたとは逆のことをします。 – Raindrop7

+0

@ゴールド名あなたはどちらかを選ぶ必要があります。 'function1'はメンバー変数を変更しないと宣言されているので、メンバー変数を変更する関数を呼び出すことはできません。 –

関連する問題