2008-09-07 51 views
25

我真的開始明白當人們說C++的錯誤信息在模板方面非常糟糕時,他們是什麼意思。我已經看到很長的錯誤,像一個功能不符合其原型一樣簡單的事情。解密C++模板錯誤信息

解密這些錯誤有沒有什麼竅門?

編輯:我使用gcc和MSVC。他們似乎都非常可怕。

回答

3

一些編譯器會給出比別人更好的消息。你使用什麼編譯器?話雖如此,他們都很糟糕。 C++ 0X將解決這個問題的大部分問題(見concepts),但該標準直到2009年纔會發佈,廣泛的支持可能會比以前更晚:-(

+1

-1他們仍然是不可破譯的;也許不像以前那樣難以破譯,但仍然很可怕! – 2013-04-12 18:50:07

+0

是的,我現在正在努力。他們很難用視覺來解析! – 2013-09-13 17:40:53

8

我確定地獄不行。小錯誤爆炸成不可讀垃圾的頁面和頁面。通常在清晨,在咖啡之前。:(

我唯一的建議是深呼吸,從頂部開始,嘗試解析重要的信息(我知道,說起來容易做起來難,對吧?)。

2

至少在Visual Studio中,有在輸出生成窗口,而不是錯誤列表給出更多的信息。我已經在錯誤的模板錯誤列出狀態,「無法轉移ert Foo <int> to Foo <int>「。 Output窗口中的實際錯誤後面有幾行幫助我解釋了實際問題。

4

由於@nsanders表示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