C++ 错误:‘;尺寸’;使用模板时不能出现在常量表达式中<;T类,内部最大尺寸>;
我收到一个编译错误:C++ 错误:‘;尺寸’;使用模板时不能出现在常量表达式中<;T类,内部最大尺寸>;,c++,c++11,templates,static-variables,C++,C++11,Templates,Static Variables,我收到一个编译错误: HuffTree.cpp:43:20: error: ‘SIZE’ cannot appear in a constant-expression PQueue<HuffNode*, SIZE>; 等等,但只有以下内容可编译: PQueue<HuffNode*, 10>; // Or any other random int 要接受参数,“size”需要是什么类型? 使用c++11每次输入成员时,您都试图将大小分配给静态常量变量大小。创建时必须
HuffTree.cpp:43:20: error: ‘SIZE’ cannot appear in a constant-expression
PQueue<HuffNode*, SIZE>;
等等,但只有以下内容可编译:
PQueue<HuffNode*, 10>; // Or any other random int
要接受参数,“size
”需要是什么类型?使用c++11每次输入成员时,您都试图将
大小
分配给静态常量
变量大小
。创建时必须给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*
}
const int MAX_SIZE=10;
// ...
void HuffTree::buildTree(char*chs,int*freqs,int size)
{
HuffNode*n=新的HuffNode(/*args*/);
PQUE队列(n,大小);//模板中的HuffNode,而不是HuffNode*
}
每次输入成员时,您都试图将大小
分配给静态常量
变量大小
。创建时必须给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*
}
const int MAX_SIZE=10;
// ...
void HuffTree::buildTree(char*chs,int*freqs,int size)
{
HuffNode*n=新的HuffNode(/*args*/);
PQUE队列(n,大小);//模板中的HuffNode,而不是HuffNode*
}
问题在于
PQueue<HuffNode*, SIZE>;
或者也在
static const int SIZE = 10;
PQueue<HuffNode*, SIZE>;
问题是
PQueue<HuffNode*, SIZE>;
或者也在
static const int SIZE = 10;
PQueue<HuffNode*, SIZE>;
你想用这段代码做什么?我正在使用一个模板类PQueue,它是一个优先级队列,并用const HuffNode填充它。最后,我将其用于一个哈夫曼树,但这并不是超级相关的。你想用这段代码做什么?我使用了一个模板类PQueue,它是一个优先级队列,并用const HuffNode填充它。我最后用它来画哈夫曼树,但这不是非常相关的,错了。指令static const int SIZE=SIZE代码>仅在第一次执行HuffTree::buildTree
时执行;问题是另一个:SIZE
是用一个仅在运行时已知的值(SIZE
)初始化的,其中在PQueue中代码>必须在编译时已知。如果在static const int SIZE=10中更改SIZE
的初始化代码>,将其留在方法中,错误应该消失。我知道我所说的可能会被误解。我想说的是,OP显然是在尝试将参数size
分配给size
,但它没有做OP认为它做的事情。此外,PQueue
采用两个模板参数(第二个是MAX_SIZE
),但它的实例化方式表明SIZE
应该为MAX_SIZE
提供值,但这同样是误导性的。这就是为什么我建议将其移到函数之外,以便明确其意图。更不用说PQueue代码>没有任何意义,因为它没有声明任何东西。你是对的:我误解了你说的话;抱歉(否决票已删除;我已编辑您的答案以删除否决票)。但我不同意你说的“你每次进入会员时都在尝试[…]”;(合理的解释,但我们不是OP想要的)而且,我认为更好(更清晰)的是,在方法内部使用一个常量值的static const(expr)int
变量,而在外部使用一个全局常量。足够公平,没有冒犯-我应该更清楚地表达它。谢谢你指出这一点!错。指令static const int SIZE=SIZE代码>仅在第一次执行HuffTree::buildTree
时执行;问题是另一个:SIZE
是用一个仅在运行时已知的值(SIZE
)初始化的,其中在PQueue中代码>必须在编译时已知。如果在static const int SIZE=10中更改SIZE
的初始化代码>,将其留在方法中,错误应该消失。我知道我所说的可能会被误解。我想说的是,OP显然是在尝试将参数size
分配给size
,但它没有做OP认为它做的事情。此外,PQueue
采用两个模板参数(第二个是MAX_SIZE
),但它的实例化方式表明SIZE
应该为MAX_SIZE
提供值,但这同样是误导性的。这就是为什么我建议将其移到函数之外,以便明确其意图。更不用说PQueue代码>没有任何意义,因为它没有声明任何东西。你是对的:我误解了你说的话;抱歉(否决票已删除;我已编辑您的答案以删除否决票)。但我不同意你说的“你每次进入会员时都在尝试[…]”;(合理的解释,但我们不是OP想要的)而且,我认为更好(更清晰)的是,在方法内部使用一个常量值的static const(expr)int
变量,而在外部使用一个全局常量。足够公平,没有冒犯-我应该更清楚地表达它。谢谢你指出这一点!
PQueue<HuffNode*, 10>;
static const int SIZE = 10;
PQueue<HuffNode*, SIZE>;
static constexpr int SIZE = 10;