gpt4 book ai didi

c++ - 错误 : ‘SIZE’ cannot appear in a constant-expression when using template< class T, int MAX_SIZE >

转载 作者:行者123 更新时间:2023-11-28 01:41:12 25 4
gpt4 key购买 nike

我遇到编译错误:

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

涉及的行是:

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

我已经为“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 是一个模板类接受:

template< class T, int MAX_SIZE >
PQueue(T* items, int size);

要接受参数,“size”需要什么类型?
使用 C++11

最佳答案

问题是

PQueue<HuffNode*, SIZE>;

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

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

PQueue<HuffNode*, 10>;

或者也在

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

它应该有效。

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

附录:您使用的是 C++11;所以尝试使用 constexpr 而不是 const

static constexpr int SIZE = 10;

关于c++ - 错误 : ‘SIZE’ cannot appear in a constant-expression when using template< class T, int MAX_SIZE >,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47087582/

25 4 0