我有一个模板类,我试图显式实例化:
template<T>
struct tmat2x3
{
...
typedef tvec3<T> col_type;
..
};
运算符声明如下:
template <typename T>
typename tmat2x3<T>::row_type operator* (tmat2x4<T> const & m, typename tmat2x3<T>::col_type const & v);
我使用以下方法显式实例化运算符:
template tmat2x3<unsigned char>::row_type operator * ( tmat2x3<unsigned char> const &m, tmat2x3<unsigned char>::col_type const &s);
然而,gcc给了我以下错误:
../glm/glm_core.cpp: In instantiation of ‘typename glm::detail::tmat2x3<T>::row_type glm::detail::operator*(const glm::detail::tmat2x3<T>&, const typename glm::detail::tmat2x3<T>::col_type&) [with T = unsigned char]’:
../glm/glm_core.cpp:443: instantiated from here
../glm/glm_core.cpp:443: error: explicit instantiation of ‘typename glm::detail::tmat2x3<T>::row_type glm::detail::operator*(const glm::detail::tmat2x3<T>&, const typename glm::detail::tmat2x3<T>::col_type&) [with T = unsigned char]’ but no definition available
对我做错了什么的想法?
提前致谢
答案 0 :(得分:0)
以下代码在 VS2008 上编译。我认为问题是我们可以在您的运营商声明中看到错误的标识符tmat2x4
。
template < typename T > struct tmat2x3{
typedef vector<T> col_type;
};
template <typename T> typename tmat2x3<T>::col_type operator* (tmat2x3<T> const & m, typename tmat2x3<T>::col_type const & v);
template <> tmat2x3<unsigned char>::col_type operator * ( tmat2x3<unsigned char> const &m, tmat2x3<unsigned char>::col_type const &s){
return tmat2x3<unsigned char>::col_type();
}
int main(int argc, char ** argv){
tmat2x3<unsigned char> blah;
blah * vector<unsigned char>();
return 0;
}
答案 1 :(得分:0)
我认为发生的事情是你明确地实例化它,但编译器正在查找头文件并且无法找到应该实例化的代码。看看操作符实际上是针对该类型实现的。
答案 2 :(得分:0)
确实问题在于定义,现在它正在编译好。