C++ テンプレートのエラー メッセージの解読
-
09-06-2019 - |
質問
テンプレートに関して C++ のエラー メッセージがかなりひどいと言われる人々が何を意味するのか、私は本当に理解し始めています。プロトタイプと一致しない関数のような単純なもので、恐ろしく長いエラーが発生するのを見たことがあります。
これらのエラーを解読するためのコツはありますか?
編集:私は gcc と MSVC の両方を使用しています。どちらもかなりひどいようです。
解決
状況をより健全にするために、次のツールを試すことができます。
他のヒント
絶対に無理だと思います。小さなエラーが爆発して、何ページも読み取れないジャンクなページになってしまいます。通常、早朝、コーヒーの前に。:(
私の唯一のアドバイスは、深呼吸して先頭から始めて、重要な情報を解析してみることです。(もちろん、言うは易く行うは難しですよね?)
として @ンサンダース 言った STLFilt 良い解決策です。自家製の STLFilt (Perl をインストールする手間を省きたい場合) は、エディターでエラー メッセージをコピーし、(より) 管理しやすくなるまでエラーの一部を置き換え始めます。
例えば
s/std::basic_string<char,std::char_traits<char>,std::allocator<char>>/string/g
それほどマニアックではない用語で言うと、これは次のことを意味します。
交換する:
std::basic_string<char,std::char_traits<char>,std::allocator<char>>
と:
string
一部のコンパイラは、他のコンパイラよりも優れたメッセージを生成します。どのようなコンパイラを使用していますか?そうは言っても、それらはすべてかなり悪いです。C++0X はこの問題のほとんどを解決します (「 概念) しかし、この標準は 2009 年までリリースされず、広範なサポートはおそらくそれよりもさらに遅れるでしょう :-(
少なくとも Visual Studio では、エラー リストではなく [出力ビルド] ウィンドウに多くの情報が表示されます。エラー リスト状態で、「Foo<int> を Foo<int> に変換できません」というテンプレート エラーが発生しました。[出力] ウィンドウの実際のエラーの後にいくつかの行があり、実際の問題が何であるかを解読するのに役立ちました。