(C ++およびgcc)エラー:予想されるコンストラクター、デストラクター、または「インライン」の前の型変換
-
22-07-2019 - |
質問
いくつかのインラインテンプレートメソッドを含むヘッダーファイルがあります。クラス宣言を追加しました(いくつかの静的メソッド...クラスよりも名前空間です)。その新しいクラスを使用するファイルで、このコンパイルエラーが発生し始めました。
同じ.hファイルを含む他のファイルがいくつかあり、それらは文句なしにコンパイルされます。
エラーをグーグルで検索すると、似たようなエラーメッセージがあるプロジェクトのバグに関するメーリングリストへのリンクがたくさんあります(唯一の違いは、コンストラクタ、デストラクタ、または型変換が先行するものと思われます)。
インテリジェントに質問をすることができるように最低限のサンプルを取得するまで、他のすべてを削除する準備ができていますが、最初に愚かな方法で質問するのが難しいと思いました:
このエラーメッセージが実際に意味するものについて基本的な手がかりを誰かに教えてもらえますか?
完全を期すために、私がこれを見ている最初の例は多かれ少なかれ似ています
namespace Utilities
{
template <typename T> GLfloat inline NormalizeHorizontally(T x)
{
GLfloat scaledUp = x*2.0;
GLfloat result = scaledUp / Global::Geometry::ExpectedResolutionX;
return result;
}
}
解決
「インライン」を置くことを意味します;キーワードが間違った場所にあります。メソッドの戻り値の型の前に移動する必要があります。例:
template <typename T> inline GLfloat NormalizeHorizontally(T x)
そのように単純。
このメッセージを1つのコンパイルユニットで取得し、他のコンパイルユニットでは取得しなかった理由は、他のコンパイルユニットからインスタンス化されていないテンプレート関数である可能性があります。
一般に、「foobarの前に予想される何とか」が発生した場合、エラー、これは構文解析エラーであり、セミコロンの欠落、中括弧の欠落、キーワードの順序の誤りなど、単純な構文の間違いを示していることがよくあります。問題は通常、言及された部分の周りのどこかにありますが、実際にはしばらく前である可能性があるため、時々それを探す必要があります。