C++ 在模板参数中将常量unsigned int转换为unsigned int

C++ 在模板参数中将常量unsigned int转换为unsigned int,c++,C++,使用以下代码: #include <iostream> template< class T, unsigned int NVectorDimension = 3 > class Vector { }; template< unsigned int TDimension > int RunTest( void ) { const unsigned int VectorDimension = 4; typedef Vector< int, Vec

使用以下代码:

#include <iostream>

template< class T, unsigned int NVectorDimension = 3 >
class Vector
{
};

template< unsigned int TDimension >
int RunTest( void )
{
  const unsigned int VectorDimension = 4;
  typedef Vector< int, VectorDimension >     VectorPixelType;
}

int main(int argc, char *argv[])
{

  return 0;
}
你知道这有什么不对吗


大卫

正如在评论中所说的那样,这应该很好。否则,您是否可以稍微更改
类向量
声明?可以试一试

template< class T, const unsigned int NVectorDimension = 3 >
class Vector  //   ^^^^^  adding const here
{
};
template
类向量//^^^^在此处添加常量
{
};
如果这不起作用,那么可以尝试使用宏解决方案作为最后手段

int RunTest( void )
{
#define VectorDimension 4
  typedef Vector< int, VectorDimension >     VectorPixelType;
   // ...
#undef VectorDimension
}
int运行测试(无效)
{
#定义向量维度4
typedef VectorVectorPixelType;
// ...
#未定义向量维数
}

gcc中确实存在一个bug。现已修复:

那是什么编译器?gcc可以处理它(而不是运行测试不返回值)。它在GCC4.4中运行良好。我听说它在GCC4.7中也不起作用。我能做些什么来改变它,使它与这些新的gcc一起工作吗?除了
RunTest
缺少返回语句之外,我看不出这段代码有什么问题…:-/这看起来像是一个编译器错误(我快速搜索了GCC Bugzilla数据库,但没有找到任何东西;其他人可能会更幸运)。做
typedef向量向量像素类型工作?常量演员,只要你想让它工作就行了吗?马特-我会做什么常量演员?你是说这是个坏主意吗?嗯,这似乎没有改变什么:#包括模板类向量{};模板void运行测试(void){const unsigned int VectorDimension=4;typedef VectorVectorPixelType;}int main(int argc,char*argv[]){return 0;}既然
VectorDimension
是运行测试的一个本地对象,您能
定义它吗(虽然不是个好主意)?
int RunTest( void )
{
#define VectorDimension 4
  typedef Vector< int, VectorDimension >     VectorPixelType;
   // ...
#undef VectorDimension
}