我收到编译错误:
>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
答案 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