Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:‘;尺寸’;使用模板时不能出现在常量表达式中<;T类,内部最大尺寸>;_C++_C++11_Templates_Static Variables - Fatal编程技术网

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;