나는 내 자신의지도를 구현하고 있는데 이것은 코드 조각입니다.템플릿 클래스가 중첩 된 템플릿 클래스, g ++가 잘 컴파일 됨, vs2013이 컴파일되지 않음
이template<typename KEY, typename VAL>
Map<KEY,VAL>::MapPair<KEY,VAL> Map<KEY,VAL>::make_map_pair(KEY k, VAL v){
return MapPair<KEY,VAL>(k,v);
}
template<typename KEY, typename VAL>
template<typename K, typename V>
Map<KEY,VAL>::MapPair<K,V>& Map<KEY,VAL>::MapPair<K,V>::setKey(K keyp, V val){
key = keyp;
value = val;
}
클래스 데프는 다음과 같다 : 나를 괴롭히는되는 코드의 일부는이 두 선언이다
template <typename KEY, typename VAL>
class Map{
private:
template<typename K, typename V>
class MapPair {
public:
K key;
V value;
MapPair(){};
MapPair(K key, V value);
MapPair<K,V>& setKey(K key, V val);
V& getValue();
K getKey();
bool operator==(MapPair<K,V> item);
};
List<MapPair<KEY,VAL>> pair_list_;
MapPair<KEY,VAL> make_empty_map_pair(KEY k);
MapPair<KEY,VAL> make_map_pair(KEY k, VAL v);
public:
Map(){}
bool exists(KEY key);
VAL& operator[](KEY key);
VAL pop_pair(KEY key);
};
이 코드는 ++ g에서 들여다없이 컴파일하지만 비주얼 스튜디오 2013가 밖으로 플립 오류 :
error C2059: syntax error : ')'
error C2059: syntax error : ')'
각 상위 함수 정의는 오류를 생성합니다. debain 7.5
g++ -Wall -c -std=c++11 vm.cpp
g++ vm.o -o vm
에서
++ g에서과는 전혀 실행시 문제를 잘 실행하고 어떻게해야 무엇을한다.
질문은 왜 g ++에서이 문제를 해결하고 vs2013을 컴파일하지 않습니까? vs2013에서이 코드를 올바르게 컴파일하려면 어떻게해야합니까? 필자가 작성한 코드에서 이식성을 보장하기 위해 어떤 종류의 습관을 개발할 수 있습니까?
이 코드를 컴파일하는 데 g ++의 정확한 버전은 사용 되었습니까? –
이것은 http://stackoverflow.com/questions/18344580/can-typename-be-omitted-in-the-type-specifier-of-an-out-of-line-member-definitio와 같은 질문입니다. 결론적으로 대답하지 못했습니다 – willj