簡體   English   中英

C ++ 11沒有匹配的函數來調用'std :: vector

[英]C++11 no matching function for call to ‘std::vector

我有一個結構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 ,它通過SystemC sc_in接收msg ,並將某些元素推送到二維向量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);

我將調用包裝在一個函數中,因為它兩次引用了向量,並且無論如何都會使代碼更好地讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM