Нет соответствующей функции для вызова 'std :: vector <int>:: insert' при использовании макроса - PullRequest
0 голосов
/ 09 мая 2018

Я написал код, который выполняет некоторую операцию над векторами, в которой я определил макрос:

#define all(c) ((c).begin(),(c).end())

... и использовал этот макрос для вставки вектора, используя v2.insert(1, all(v1)).

Это означает, что я хочу вставить все элементы из вектора v1 во вторую позицию в векторе v2. Но я получаю следующую ошибку в строке с вызовом функции insert:

нет подходящей функции для вызова 'std :: vector :: insert ...

Код выглядит следующим образом:

#include<iostream>
#include<stdio.h>
#include<vector>
#include<stdlib.h>

#define all(c) ((c).begin(),(c).end())
using namespace std;
int main()
{
    int data[]={1,2,3,4,5,6,7,8};
    vector<int> v1(data+1,data+5);
    vector<int> v2(2,1);

    v2.insert(1,all(v1));

    printf("\n Before the for loop");
    for(vector<int> v2::iterator it=v2.begin();it!=v2.end();it++)
    {
        printf("\t %d \t ",*it++);
    }
    return 0;
}

1 Ответ

0 голосов
/ 09 мая 2018

Из-за макроса у вас есть v2.insert(1,((v1).begin(),(v1).end())) с внутренним ((v1).begin(),(v1).end()), использующим встроенный оператор запятой вместо разделителя аргументов. Это означает, что вы действительно делаете v2.insert(1,((v1).end()))

Я предлагаю вам не использовать макросы, чтобы "сократить" подобные вещи. Помимо создания таких проблем, как у вас, он также делает код сложнее для чтения, понимания и обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...