たとえば、markerdisplay.cppファイルがあります。 markerdisplayメンバ関数は以下のコードのようになります。C++(クラス)では、常にヘッダファイルに関数を宣言する必要がありますか?
void MarkerDisplay::setMarkerStatus(MarkerID id, StatusLevel level, const std::string& text)
{
.....
}
markerdisplay.cppにメンバー以外の機能を追加できますか?
例えば、
bool validateFloats(const visualization_msgs::Marker& msg)
{
...
}
関数validateFloatsメンバ関数ではなく、私はまた、ヘッダファイルに宣言しません。私はvalidateFloats.cppファイル内でこの関数を使用します。
これはいくつかの問題を引き起こす可能性があります。本当?
:
あなたも、完全に
またちょうど同じ効果を持つべきである翻訳単位で
static
関数を定義する匿名の名前空間に(リンカを含む)ことを隠すことができますプロトタイプのヘッダー(または場合によっては明示的な宣言)のヘッダー、ヘッダーを他のファイルにインクルードするとき、プロトタイプがない場合、リンカーは関数を呼び出すときに関数を見つけることができません。 –@ShawnicHedgehog "*プロトタイプがない場合、リンカはあなたがそれを呼び出すときに関数を見つけることができません*"これは正確ではなく、 "あなたが呼んだとき"ここで本当に意味をなさない。プロトタイプと宣言の違いは何ですか? –
プロトタイプはすべてスコープに関するものです。私はもう少し明確にすべきだと思います。プロトタイプに関する記述:* .cppファイルで関数を宣言し、*の中にプロトタイプを入れない場合。hppファイル、* .hppファイルのみをインクルードするとコンパイラはその関数をどのように見つけ出すのでしょうか? –