使用模板编译MS VC ++代码时出现GCC错误

时间:2011-02-11 14:00:57

标签: c++ templates gcc

我们正在为Visual Studio 2008编写一些代码并尝试使用gcc编译它。我们在以下代码中遇到错误(简化为必要):

template<int R, int C, typename T>
struct Vector
{
 template <typename TRes>
 TRes magnitude() const
 {
  return 0;
 }

};

struct A
{
 typedef Vector<3,1,int> NodeVector;
};

template<class T>
struct B
{
 void foo()
 {
  typename T::NodeVector x;
  x.magnitude<double>(); //< error here
 }
};

...
    B<A> test;
    test.foo();
海湾合作委员会说

error: expected primary-expression before 'double'
error: expected `;' before 'double'

你能解释一下这个错误吗?什么是交叉编译器解决方案?

非常感谢!

2 个答案:

答案 0 :(得分:9)

问题在于,由于C ++编译器不知道T的实际类型(更不用说T::NodeVector,因此它不知道magnitude应该是模板。您需要明确指定:

x.template magnitude<double>();

否则C ++会将令牌解析为xoperator.magnitudeoperator<doubleoperator> ......

顺便说一句,海湾合作委员会是对的。在这些问题上,MSVC ++是非常宽松的。

答案 1 :(得分:1)

在B点,它无法知道x是什么类型,并且该量值将是模板函数,因此您需要首先将其声明为。