错误:使用模板<时,'SIZE'不能出现在常量表达式中class T,int MAX_SIZE>

时间:2017-11-03 02:28:48

标签: c++ c++11 templates static-variables

我收到编译错误:

>install pip numpy

涉及的行是:

HuffTree.cpp:43:20: error: ‘SIZE’ cannot appear in a constant-expression
  PQueue<HuffNode*, SIZE>;

我为#34; void HuffTree::buildTree(char * chs, int * freqs, int size ) { static const int SIZE = size; PQueue<HuffNode*, SIZE>; &#34;

尝试了所有不同的类型
SIZE

等。但只有以下编译:

PQueue<HuffNode*, size>; // From the method parameter
static const int SIZE = static_cast<int>(size);

我也得到了相关的错误:

PQueue<HuffNode*, 10>; // Or any other random int

HuffTree.cpp:43:24: error: template argument 2 is invalid PQueue<HuffNode*, SIZE>; 是接受以下内容的模板类​​:

PQueue

&#39; template< class T, int MAX_SIZE > PQueue(T* items, int size); &#39;需要被接受的论点?
使用c ++ 11

2 个答案:

答案 0 :(得分:1)

您每次进入会员时都试图将size分配给static const变量SIZE。创建时,您必须为SIZE提供一次,例如static const int SIZE = 10;。我建议在你的会员之外宣布:

const int MAX_SIZE = 10;

// ...

void HuffTree::buildTree(char * chs, int * freqs, int size )
{
    HuffNode* n = new HuffNode(/* args */);
    PQueue<HuffNode, MAX_SIZE> queue(n, size); // HuffNode in template, not HuffNode*

}

答案 1 :(得分:1)

问题在于

PQueue<HuffNode*, SIZE>;

是一种类型,需要在编译时知道SIZE

如果使用已知编译时间的值声明SIZE,如

PQueue<HuffNode*, 10>;

static const int SIZE = 10;
PQueue<HuffNode*, SIZE>;

它应该有效。

但是如果SIZE依赖于值size,只知道运行时(函数方法的输入值被认为是已知的运行时),则编译器无法知道{{ 1}}编译时间。

附录:你正在使用C ++ 11;因此,请尝试使用SIZE代替constexpr

const