Ошибка: invalid conversion 'from' int to 'int(*)()'

223
02 июля 2017, 15:07

Всем добра.

Возникает ошибка при компиляции: "invalid conversion from int to int(*)() [-fpermissive]",при нажатии кнопки вызова функции добавления строки в БД SQLite через модел/представление.

void CommonWindow::addRowClicked() 
{
    int a = 1;
    m_model->insertRows(m_model->rowCount(QModelIndex()), a, QModelIndex());
}

Проблема с m_model->rowCount(QModelIndex())

int TableModel::rowCount(const QModelIndex &index) const 
{
   QSqlQuery query(QString("SELECT count(*) FROM %1").arg(dBName));
   int rowsNumber = query.value(0).toInt();
   return rowsNumber;
}

вот сама функция вставки строки:

bool TableModel::insertRows(int rowCount(), int rows , const QModelIndex &parent)
{
  beginInsertRows(QModelIndex(), rowCount(), rowCount());
  {
     int rows=1;
     QSqlQuery query(QString("INSERT INTO %1 (depthHole, inclinationAngle, horizontalAngle, TVD, intensityInclAngle, intensityHorizontAngle, color, comment) DEFAULT VALUES").arg(dBName));
  }
  endInsertRows();
  return true;
}

вот только я не совсем понимаю: Ошибка "conversion from int to int(*)()" это получается из int в int указалтель. Но я нигде не вижу указателя. Может быть конечно все таки лыжи едут, а дело во мне...

Answer 1

int(*)() - это не просто указатель, а указатель на функцию. Вы вызываете метод insertRows так:

                    /*     Это int                */
m_model->insertRows(m_model->rowCount(QModelIndex()), a, QModelIndex());

А объявили эту функцию так:

                           /* Это int(*)()*/
bool TableModel::insertRows(int rowCount(), int rows , const QModelIndex &parent)

Теперь видите ошибку?

UPD.

Во-первых, вы не переопределили виртуальную функцию, а написали новую. Чтобы компилятор проверял, действительно ли виртуальная функция переопределена, добавьте в h-файле после объявления функции слово override:

virtual bool insertRows(int rowCount, int rows, const QModelIndex &parent) override;

Во-вторых, в определении функции не может быть вызова другой функции. Количество строк в таблице вы вычисляете при вызове и передаёте с первым аргументом и делаете это правильно.

UPD2.

Давайте разберёмся. Вот ваш вызов функции:

m_model->insertRows(m_model->rowCount(QModelIndex()), a, QModelIndex());

здесь эта конструкция

m_model->rowCount(QModelIndex())

вычисляет количество строк в модели. Полученное число типа int передаётся как параметр в функцию insertRows. Стало быть, функция insertRows должна это число типа int принять. Зачем тогда вы пытаетесь "вызвать" функцию в определении функции insertRows? У вас как раз и получился не вызов, а объявление указателя на функцию. Сделайте так:

bool TableModel::insertRows(int rowCount, int rows , const QModelIndex &parent)

и всё заработает.

READ ALSO
Программа автоматизации Excel C++ Builder

Программа автоматизации Excel C++ Builder

Задачей есть приложение, которое будет открывать xls-файл, редактировать по шаблону в нём выбранную колонку (в данном случае дату) и сохранять...

215
Какая нотация используется в стандарте ISO 14882?

Какая нотация используется в стандарте ISO 14882?

Стало интересно, как читать стандартФормальные правила типа BNF, EBNF, Z, ASN

214
Отправка большого tcp-пакета по сегментам

Отправка большого tcp-пакета по сегментам

Пишу программу для перехвата tcp-трафика в корпоративной сети, при котором клиенту отправляется обратно tcp-пакет с html-страницей (какая-нибудь...

212
DirectX функция D3DXVec3Normalize, нормализация вектора

DirectX функция D3DXVec3Normalize, нормализация вектора

Начал изучать графику, изучаю функции матбиблиотеки dx, и одна функция отказывается работать

253