私はオブジェクト指向のコードでは比較的新しいので、何か簡単なものが見つからないかもしれません。以下のコードは、主に別のファイルの関数プロトタイプのスケルトンコードです。問題は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;
}
'chessMessageValid'は実際には' bool(Light ::)() '型を持たないので、これは偽のエラーメッセージです。メンバ関数は、この点で自由関数に類似していません。例えば、1つのポインタを作成する場合は、 '&'演算子が必要です。この場合、コンパイラはエラーメッセージを生成するためのより良い仕事をすることができます。 –
@ M.Mそれはどのようなタイプですか?なぜなら、メンバー関数にその型シグニチャがあると思ったからです。 – Rakete1111