1

いくつかのインライン テンプレート メソッドを含むヘッダー ファイルがあります。私はそれにクラス宣言を追加しました(ほんの2、3の静的メソッド...クラスというよりは名前空間です)、その新しいクラスを使用するファイルでこのコンパイルエラーが発生し始めました。

同じ .h ファイルを含む他のファイルがいくつかありますが、問題なくコンパイルされます。

エラーをグーグルで検索すると、同様のエラーメッセージを持つプロジェクトのバグに関するメーリングリストへのリンクがたくさん表示されます (唯一の違いは、コンストラクタ、デストラクタ、または型変換が先行することになっているようです)。

必要最小限の最小限のサンプルが得られるまで、他のすべてを取り除いて、インテリジェントに質問できるようにする準備ができていますが、最初に愚かな方法で質問することに挑戦することにしました。

このエラーメッセージが実際に何を意味するのかについての基本的な手がかりを誰か教えてもらえますか?

完全を期すために、私がこれを見ている最初の例は多かれ少なかれ次のように見えます

namespace Utilities
{
   template <typename T> GLfloat inline NormalizeHorizontally(T x)
   {
      GLfloat scaledUp = x*2.0;
      GLfloat result = scaledUp / Global::Geometry::ExpectedResolutionX;
      return result;
   }
}
4

1 に答える 1

8

これは、「インライン」キーワードを間違った場所に置いたことを意味します。メソッドの戻り値の型の前に配置する必要があります。

 template <typename T> inline GLfloat  NormalizeHorizontally(T x)

そのような単純な。

このメッセージが 1 つのコンパイル ユニットで表示され、他のコンパイル ユニットでは表示されない理由は、他のコンパイル ユニットからインスタンス化されていないテンプレート化された関数である可能性があります。

通常、「expected blah blah before foobar」エラーが発生した場合、これは解析エラーであり、多くの場合、セミコロンの欠落、中括弧の欠落、またはキーワードの順序の誤りなどの単純な構文ミスを示しています。問題は通常、言及された部分のどこかにありますが、実際にはしばらく前に発生する可能性があるため、時々それを探す必要があります.

于 2009-08-04T14:28:00.977 に答える