gpt4 book ai didi

C++11 没有匹配函数来调用‘std::vector

转载 作者:行者123 更新时间:2023-11-30 00:45:52 25 4
gpt4 key购买 nike

我有一个结构 msg :

struct msg {
//destination port
int addr;
//data
unsigned long long payload;

//prioritized flag
bool isPrio;

//construcor?
msg(int a, int p, bool b) : addr(a), payload(p),isPrio(b) { }

msg() : addr(0), payload(0), isPrio(false) { }

...
};

还有一个类distributor接收msg通过 SystemC sc_in并将一些元素插入二维 vector std::vector<std::vector <msg>> buffer :

class distributor: public sc_module {
public:
sc_vector<sc_in<msg>> inputMsg;
std::vector<std::vector <msg>> buffer;
int n, m, bufferSize;
...


distributor(sc_module_name name, int n, int m, int bufferSize) : //n -> number of inputs, m -> number of outputs
sc_module(name),
inputMsg("inputMsg", n),
n(n),
m(m),
buffer(m),
bufferSize(bufferSize)
...
{
SC_HAS_PROCESS(distributor);
SC_METHOD(receive); sensitive << ...;
...
}

void receive() {
for(int i = 0; i < n; i++){
msg newMessage = inputMsg.at(i).read();
if(buffer.at(newMessage.addr).size() >= bufferSize) continue;
if(newMessage.isPrio) buffer.at(newMessage.addr).insert(0, newMessage); //<- ERROR OCCURS HERE
else buffer.at(newMessage.addr).push_back(newMessage);
}
}

...
};

在注释行中出现以下错误:

error: no matching function for call to ‘std::vector<msg>::insert(int, msg&)’
if(newMessage.isPrio) buffer.at(newMessage.addr).insert(0, newMessage);
^

为什么会出现这个错误?

buffer.at(newMessage.addr)std::vector <msg>所以它应该采用 msg 类型的对象这是newMessage ...

感谢您的帮助!

最佳答案

std::vector::insert迭代器作为第一个参数,而不是索引。你可能想要这样:

void add_to_front(std::vector<msg> &vector, const msg &message)
{
vector.insert(begin(vector), message);
}


if(newMessage.isPrio) add_to_front(buffer.at(newMessage.addr), newMessage);

我将调用包装在一个函数中,因为它引用了 vector 两次,无论如何它都会使代码更好读。

关于C++11 没有匹配函数来调用‘std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41164149/

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