2016-07-10 5 views
0

私はオブジェクト指向のコードでは比較的新しいので、何か簡単なものが見つからないかもしれません。以下のコードは、主に別のファイルの関数プロトタイプのスケルトンコードです。問題はLight :: setMessage()関数にあります。つまり、コンパイル時にこのエラーが発生します。1つの特定の関数を使って変わった型変換

metaphase.cpp:25:27: error: cannot convert ‘Light::checkMessageValid’ from type ‘bool (Light::)()’ to type ‘bool’ 

私はクラスに新たなんだので、私は何か間違ったことをやっている場合、それは私の驚きではないだろうが、私は、もし(checkMessageValid)を削除した場合、それはコンパイル他人を残します。私はこれらの関数に何もないことを知っていますが、コンパイラがそれらをまったく同じものとして扱っていない理由はわかりません。

#include "lighting.hpp" 

bool Light::checkMessageValid(void) 
{ 
    return false; 
} 

bool Light::_setChannel(unsigned int ch) 
{ 
    return false; 
} 

bool Light::_setCommand(unsigned int co) 
{ 
    return false; 
} 

bool Light::_setData(unsigned int d) 
{ 
    return false; 
} 

bool Light::setMessage(unsigned int ch, unsigned int co, unsigned int d) 
{ 
    if(checkMessageValid) 
    { 
     if(!_setChannel(ch)) 
      return false; 
     if(!_setCommand(co)) 
      return false; 
     if(!_setData(d)) 
      return false; 
    } 
    return false; 
} 

答えて

1

あなたが言ったように、checkMessageValidは、関数、変数ではありません。関数は呼び出される必要があります、checkMessageValid()

checkMessageValid(タイプbool (Light::)())のエラーは、boolに変換できません。 ifステートメントにはbool(比較する)が必要なため、コンパイラーは関数タイプをboolに変換しようとしますが、そのような変換はないため失敗します。

+0

'chessMessageValid'は実際には' bool(Light ::)() '型を持たないので、これは偽のエラーメッセージです。メンバ関数は、この点で自由関数に類似していません。例えば、1つのポインタを作成する場合は、 '&'演算子が必要です。この場合、コンパイラはエラーメッセージを生成するためのより良い仕事をすることができます。 –

+0

@ M.Mそれはどのようなタイプですか?なぜなら、メンバー関数にその型シグニチャがあると思ったからです。 – Rakete1111

関連する問題