У меня есть msg
-структура:C++ 11 не соответствующих функций для вызова «станд :: вектор
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
и толкают некоторые элементы 2 мерных вектор 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
...
Я ценю вашу помощь!