클래스가 Vector<T>
이고 클래스가 YAML::Node
인 라이브러리를 사용하고 있습니다. 이 두 가지 유형에 대해 operator>>
을 오버로드하고 싶습니다.연산자의 명시 적 인스턴스화 >> overload
내가 Vector
의 선언에 다음과 같은 선언을 추가 한이 : 마지막으로, 나는 다음과 같은 (시도를 추가 한
template<typename T>
void operator>>(YAML::Node const & node, Vector<T> & v) {
node[0] >> v.x;
node[1] >> v.y;
node[2] >> v.z;
}
:
friend void operator>>(YAML::Node const & node, Vector<T> & v);
는 또한 함수의 다음 구현을 추가 한 at) 템플릿을 명시 적으로 인스턴스화하여 T = num_t
:
template
void operator>>(YAML::Node const & node, Vector<num_t> & v);
그러나, 이것은 다음과 같은 링커 오류가 발생합니다
Error 9 error LNK2019: unresolved external symbol "void __cdecl operator>>(class YAML::Node const &,class Vector<double> &)" ([email protected]@[email protected]@[email protected]@@@Z) referenced in function "public: static class Scene __cdecl Scene::fromFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" ([email protected]@@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z)
,
그러나 나는이 기능의 구현을 다음 (템플릿이 아닌)을 추가하면, 모든 것을 컴파일 (num_t
이 double
에 대한 형식 정의입니다) 세부 사항 :
void operator>>(YAML::Node const & node, Vector<num_t> & v) {
node[0] >> v.x;
node[1] >> v.y;
node[2] >> v.z;
}
왜 함수의 템플릿 버전이 작동하지 않습니까?
편집 : 언급하는 것을 잊었습니다; 컴파일러는 Visual Studio 11입니다.
감사합니다. –