2016-02-24 27 views
1

在有兩個實例類型(TPT)模板類我公司目前有使用const_iterator爲類下面一行:編譯器錯誤:預期嵌套名指定之前的typedef

typedef typename std::vector< std::pair<T, PT> >::const_iterator const_iterator; 

這工作在但是當在C++ 98環境中編譯時(可能不幸由於各種原因需要),C++ 11/14環境會出現錯誤,標題爲expected nested name specifier before typedef

有什麼辦法可以解決舊編譯器的問題嗎?

編輯:這是我的課的基本結構,

template<typename T, typename PT> class MyClass { 

private: 

    std::vector< std::pair<T,PT> > dataWithPriorityVec;  

    //... various private methods... 

public: 

    typedef typename std::vector< std::pair<T,PT> >::const_iterator const_iterator; 

    //... constructors and various public methods... 

}; 
+2

你的「模板類」是怎樣的? –

+0

顯示最小的完整示例。 –

+1

你的例子在這裏的幾個編譯器版本中乾淨地編譯(此外,在'const_iterator'之後缺少';')。 – alecov

回答

1

你包括類定義之前<vector><utility>

您需要"include what you use"以避免交叉編譯問題。

不保證<utility>(要求爲std::pair)或<vector>包含在任何其他標準標題中。 正如評論中所述。

因此,用於C++ 98構建的編譯器可能需要它編譯正確。

相關問題