17

Qt Creator で次の警告が表示されるのはなぜですか: ` inline function 'bool Lion::growl ()' used but never defined?

コードを再確認したところ、宣言があります

inline bool growl ()Lion( lion.h)内

および の対応する実装lion.cpp:

inline bool Lion::growl ()

どうしたの?

編集:私の仮​​定は、.cppファイルで実際のインラインメソッドを定義することは合法であるということでした(inlineキーワードはコンパイラにメソッド本体を他の場所で探すように警告します)、または私は間違っていますか?

ヘッダー ファイルを実装の詳細で乱雑にしたくありません。

4

3 に答える 3

35

まあ、正確な問題はわかりませんが、まずは:

  • インライン メソッドは、ヘッダー ファイルに実装されることになっています。コンパイラは、実際にインライン化するためにコードを認識する必要があります。
  • また、クラス宣言で「inline」キーワードを使用しても効果はありません。しかし、それも傷つけることはできません。

参照: c++ faq lite

于 2009-09-14T13:59:49.087 に答える
4

インライン メソッドは、ヘッダー ファイルに実装されることになっています。コンパイラは、実際にインライン化するためにコードを認識する必要があります。

インライン関数が同じプロジェクトで使用されている場合を除き、ヘッダーが#includeされている別のファイルで使用される可能性があります。

ヘッダーを関数プロトタイプに制限すると読みやすくなるため、ライブラリにそのような制限があるのが恋しいです。

.cpp の#includeはどうですか?

于 2012-02-29T13:14:49.563 に答える
1

ヨハンが言ったことに加えて、両方が同じヘッダー ファイルにある場合でも、関数の定義と宣言を別々にすることはできません。これは、特にクラスのメンバー関数に当てはまります。関数コードは次の形式にする必要があります。

class someClass
{
void someFunc()
{ ... }
}
// This will make the function inline even w/o the explicit 'inline'

そしてフォームのNOT

class someClass
{
public:
     void someFunc();
}

void someClass::someFunc()
{ ... }
于 2009-09-28T20:25:26.257 に答える