2009-07-10 45 views
2

我有一個在VC6中編譯好的模板類。但它不是在VC9編譯。爲此,我在一種類型前添加了「typename」關鍵字。之後它在vc9中編譯,但不在VC6中編譯。我如何使它與編譯器一起編譯。如何使這個模板類在VC6和VC9中編譯

#include <map> 
#include <vector> 

template <class T1, class T2> 
class A 
{ 
public: 
    std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in); 
}; 

template <class T1, class T2> 
std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in) 
{ 
    std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> b; 
    return b; 
} 

void main() 
{ 
    A<int, int> a; 
    a.insert(std::pair<int, int>(0, 0)); 
} 

上面的代碼在VC6中編譯。但不是在VC9。 以下代碼適用於VC9,不適用於VC6。

#include <map> 
#include <vector> 

template <class T1, class T2> 
class A 
{ 
public: 
    std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in); 
}; 

template <class T1, class T2> 
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool> A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in) 
{ 
    std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> b; 
    return b; 
} 

void main() 
{ 
    A<int, int> a; 
    a.insert(std::pair<int, int>(0, 0)); 
} 
+3

在一些你要到編寫代碼sillyness的水平,在這兩個VC9和Fortran 77 – MSalters 2009-07-10 13:13:26

回答

5

VC6不是很符合標準。您可能只需#IFDEF繞過這一個。

1

我沒有VC6,但VC2003也抱怨。所以我把類型名

std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in); 

之前使其

typename std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in); 

和它的工作,也許你可以試試跑步。 HTH,

+0

這將編譯沒有工作點 – 2009-07-10 12:02:23

+0

奇怪的是科莫太抱怨。嘗試在使用std :: vector >之前使用typename,如std :: pair > :: iterator,bool> b;他們接受。 – Abhay 2009-07-10 12:10:27

1

變化評論說:

#include <map> 
#include <vector> 

template <class T1, class T2> 
class A 
{ 
public: 
    std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in); 
}; 

template <class T1, class T2> 
std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool> // +typename 
A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in) 
{ 
    std::pair< typename std::vector<std::pair<T1,T2> >::iterator, bool> b; // +typename 
    return b; 
} 

int main() // void->int 
{ 
    A<int, int> a; 
    a.insert(std::pair<int, int>(0, 0)); 
}