gpt4 book ai didi

c++ - 在优先级队列上调用推送时出现错误 "reference to non-static member function must be called"

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:48 24 4
gpt4 key购买 nike

这可能是一个明显的问题,但作为 C++ 的新手,我不太确定为什么会出现此错误。

我有以下设置,我使用了一个 priority_queue,我这样输入:

typedef priority_queue<int,vector<int>,PayloadIndexComparison> PayloadIndexPQ; 

然后,我有一个使用这个优先级队列的类:

struct MappingTechnique {

vector<double> currentAccumulatedPayloadIndexWeights;
PayloadIndexPQ payloadIndexPQ(PayloadIndexComparison(&currentAccumulatedPayloadIndexWeights));

MappingTechnique() {
for (int i = 0; i < PAYLOAD_SIZE; i++) {
payloadIndexPQ.push(i); // this line gives an error
}
}
}

但是这段代码给出了以下错误:

error: reference to non-static member function must be called
payloadIndexPQ.push(i);

有人知道为什么会这样吗?我在其他地方的代码中使用了相同的优先级队列并且可以毫无问题地调用 push,所以我怀疑这是因为我在构造函数中调用它......

最佳答案

这一行:

PayloadIndexPQ payloadIndexPQ(PayloadIndexComparison(&currentAccumulatedPayloadIndexWeights));

被解释为函数声明。它是一个名为 playloadIndexPQ 的函数,它引用了一个名为 currentAccumulatedPayloadIndexWeightsPayloadIndexComparision 对象。

我知道,这很奇怪。但是由于您在类定义中,因此无论如何都不能使用表达式列表 (...) 声明变量。您可以在默认构造函数的 ctor-initializer 中声明变量并对其进行初始化。

struct MappingTechnique {
MappingTechnique() : payloadIndexPQ(PayloadIndexComparison(&currentAccumulatedPayloadIndexWeights))
{ }
// ...
};

在 C++11 中,您有两个额外的选项。您可以使用大括号或等号初始值设定项,以便可以在声明数据成员的位置定义数据成员:

PayloadIndexPQ payloadIndexPQ = PayloadIndexComparison(&currentAccumulatedPayloadIndexWeights);
// or PayloadIndexPQ payloadIndexPQ{ ... }

关于c++ - 在优先级队列上调用推送时出现错误 "reference to non-static member function must be called",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30489390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com