Нет соответствующей функции-члена для вызова функции ‘push_back’

#c

Вопрос:

У меня есть матрица A(4,4), использующая newmat, и я хочу поместить ее в вектор, а затем использовать push_back, если условие допустимо, и поместить ее в двойной вектор B. Я использую этот код : Код :

 vector <vector <double>>B;
vector <int>  temp;
for (int i=1;i <= A.ncols();  i)
   { for (int j=1;j < rank_of_A ;   j)
      { temp(i)= A(i,j); }
    }

 for (int i = 1; i < A.ncols();   i)
     { if(did_i_pick_this_col[i])
        { B.push_back(temp(i));
          }
    }
 

Я получаю сообщение об ошибке » Тип «вектор» не предоставляет оператора вызова»

Ответ №1:

Здесь вы пытаетесь использовать operator() на vector<int> — то есть, temp :

 temp(i)= A(i,j);
// and
B.push_back(temp(i));
 

У него нет такого оператора.

Вы, вероятно, имели в виду оператор индекса, operator[] :

 temp[i]= A(i,j); 
// and
// note, you try pushing an `int` into a `vector<vector<double>>` here:
B.push_back(temp[i]); // this won't work
 

Даже если вы исправите вышесказанное, ваша программа, однако, будет иметь неопределенное поведение, поскольку temp она пуста.

Вы могли бы создать его с A.ncols() 1 элементами вместо того, чтобы создавать его пустым:

 vector <int> temp(A.ncols()   1);
 

Цикл, который идет от 1 до A.ncols() вместо от 0 до A.ncols() - 1 , все еще может быть ошибкой, но трудно сказать, не видя остальную часть кода. Я подозреваю, что

 for (int i = 1; i <= A.ncols();   i)
 

действительно должно быть:

 for (int i = 0; i < A.ncols();   i)
 

в этом случае temp вместо этого следует создать вот так:

 vector <int> temp(A.ncols());
 

Комментарии:

1. Кроме того, OP пытается протолкнуть temp[i] (целое число), к B которому относится a vector of vector<double> .

2. @AshutoshAswal Хорошо заметен. Я добавил комментарий об этом