Разница работы QVector append и push_back
//Этим можно не забивать голову, в своей сути - Vector<T>
//Указанно полностью, для "общей картины" вопроса
typedef QVector<QPair<QPair<QString,LexemType>, QVector<int>>> tokenType ;
QSet<QString> MainWindow::_brackets={"(",")","{","}","[","]","<",">"};
tokenType tokens;
QStringList tmp = str.split(" ");
for (int var = 0; var < tmp.length(); ++var)
{
if (_brackets.contains(tmp.at(var))) {processBrackets(tmp.at(var));}
}
QVector<tokenType> MainWindow::processBrackets(const QString &inputStr)
{
static QVector<tokenType> foundTokens;
.......
return foundTokens;
}
Почему tokens.push_back(d.at(var)); - выдает:
mainwindow.cpp:54:24: error: no matching member function for call to 'push_back' qvector.h:272:17: note: candidate function not viable: no known conversion from 'const QVector<QPair<QPair<QString, LexemType>, QVector > >' to 'const QPair<QPair<QString, LexemType>,
QVector >' for 1st argument qvector.h:273:10: note: candidate function not viable: no known conversion from 'const QVector<QPair<QPair<QString, LexemType>, QVector > >' to 'QPair<QPair<QString, LexemType>, QVector >' for 1st argument
,а
tokens.append(d.at(var)); - нет?
Хотя
tokens.push_back(d.at(var)); - внутри устроен как void push_back(T &&t) { append(std::move(t))};
- ссылаясь на тот же inline void append(const QVector<T> &l) { *this += l; }
Ответы (1 шт):
push_back может добавлять только один элемент, а append - копию вектора-аргумента.
Ругань компилятора
mainwindow.cpp:54:24: error: no matching member function for call to 'push_back' qvector.h:272:17: note: candidate function not viable: no known conversion from 'const QVector<QPair<QPair<QString, LexemType>, QVector > >' to 'const QPair<QPair<QString, LexemType>,
как раз на то, что Вы пытаетесь засунуть в push_back целый вектор, а не его элемент.