Russian Qt Forum
Ноябрь 23, 2024, 21:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: invalid use of incomplete type (решено)  (Прочитано 26821 раз)
theorist
Гость
« : Июнь 02, 2010, 15:50 »

здравствуйте!
оказался в тупике, хотя решение, наверняка, насколько простое, что сам, наверное, буду долго смеяться ...

итак, пытаюсь в Qt Creator сделать программу, а вместо неё получаю следующее:

Цитировать
.../mainwindow.cpp:38: ошибка: invalid use of incomplete type ‘struct TableModel’
.../mainwindow.h:11: ошибка: forward declaration of ‘struct TableModel’
.../mainwindow.cpp:39: ошибка: нет подходящей функции для вызова ‘QTableView::setModel(TableModel*&)’

сам код такой:

Код:
...
//mainwindow.cpp

#include <QTableView>
...
#include "mainwindow.h"
#include "tablemodel.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
createCentralWdgt();
...
}
...
void MainWindow::createCentralWdgt()
{
tableView = new QTableView();
tableModel = new TableModel();
tableView->setModel(tableModel);
setCentralWidget(tableView);
}
...

Код:
...
//mainwindow.h

#include <QtGui/QMainWindow>

class QTableView;
class TableModel;

class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
...

private:
...
QTableView *tableView;
TableModel *tableModel;
...
void createCentralWdgt();
...
};
...

Код:
...
//tablemodel.h

#include <QAbstractTableModel>

class TableModel : public QAbstractTableModel
{
Q_OBJECT
public:
TableModel(QObject* = 0);
int rowCount(const QModelIndex& = QModelIndex()) const;
int columnCount(const QModelIndex& = QModelIndex()) const;
QVariant data(const QModelIndex&, int = Qt::DisplayRole) const;
QVariant headerData(int, Qt::Orientation, int = Qt::DisplayRole) const;
Qt::ItemFlags flags(const QModelIndex&) const;
bool insertRows(int, int, const QModelIndex& = QModelIndex());
bool removeRows(int, int, const QModelIndex& = QModelIndex());
bool insertColumns(int, int, const QModelIndex& = QModelIndex());
bool removeColumns(int, int, const QModelIndex& = QModelIndex());
...
};
...

Код:
...
//tablemodel.cpp

#include "tablemodel.h"

TableModel::TableModel(QObject *parent) : QAbstractTableModel(parent) {...}
int TableModel::rowCount(const QModelIndex &parent) const {...}
int TableModel::columnCount(const QModelIndex &parent) const {...}
QVariant TableModel::data(const QModelIndex &index, int role) const {...}
QVariant TableModel::headerData(int section, Qt::Orientation orientation, int role) const {...}
Qt::ItemFlags TableModel::flags(const QModelIndex &index) const {...}
bool TableModel::insertRows(int position, int rows, const QModelIndex &index) {...}
bool TableModel::removeRows(int position, int rows, const QModelIndex &index) {...}
bool TableModel::insertColumns(int position, int columns, const QModelIndex &index) {...}
bool TableModel::removeColumns(int position, int columns, const QModelIndex &index) {...}

прошу помощи  Непонимающий
« Последнее редактирование: Июнь 02, 2010, 19:43 от theorist » Записан
ритт
Гость
« Ответ #1 : Июнь 02, 2010, 18:39 »

а весь файл tablemodel.h можно?
Записан
theorist
Гость
« Ответ #2 : Июнь 02, 2010, 19:08 »

а весь файл tablemodel.h можно?
конечно, хотя, в принципе, он практически соответствует уже выложенному. вот:

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QAbstractTableModel>

class TableModel : public QAbstractTableModel
{
Q_OBJECT
public:
TableModel(QObject* = 0);
int rowCount(const QModelIndex& = QModelIndex()) const;
int columnCount(const QModelIndex& = QModelIndex()) const;
QVariant data(const QModelIndex&, int = Qt::DisplayRole) const;
QVariant headerData(int, Qt::Orientation, int = Qt::DisplayRole) const;
Qt::ItemFlags flags(const QModelIndex&) const;
bool insertRows(int, int, const QModelIndex& = QModelIndex());
bool removeRows(int, int, const QModelIndex& = QModelIndex());
bool insertColumns(int, int, const QModelIndex& = QModelIndex());
bool removeColumns(int, int, const QModelIndex& = QModelIndex());
private:
QList<QStringList> array;
};

#endif // MAINWINDOW_H
Записан
Rcus
Гость
« Ответ #3 : Июнь 02, 2010, 19:13 »

Copy-paste умеет не только ракеты ронять.
Copy-paste умеет не только ракеты ронять

/* смотрит на include guards */
Записан
theorist
Гость
« Ответ #4 : Июнь 02, 2010, 19:41 »

Copy-paste умеет не только ракеты ронять.
Copy-paste умеет не только ракеты ронять

/* смотрит на include guards */
спасибо! я же говорил, что сам буду смеяться  Смеющийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Июнь 02, 2010, 20:11 »

Не понял, прошу объяснить где ошибка (я ее не нашел)
Записан
theorist
Гость
« Ответ #6 : Июнь 02, 2010, 20:34 »

Не понял, прошу объяснить где ошибка (я ее не нашел)

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
...
#endif // MAINWINDOW_H
а файл называется tablemodel.h. правда, смешно? Веселый
Записан
ритт
Гость
« Ответ #7 : Июнь 03, 2010, 00:34 »

почему и просил весь файл...
Записан
theorist
Гость
« Ответ #8 : Июнь 03, 2010, 08:14 »

почему и просил весь файл...
спасибо за наводку, Константин! но без дополнительной подсказки я бы, наверное, ни за что не догадался бы, что причина проблемы кроется именно в директивах препроцессора. впредь буду обращать на них больше внимания.

думаю, что тему лучше перенести в раздел "Программирование: C/C++"
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Июнь 04, 2010, 15:15 »

Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
...
#endif // MAINWINDOW_H
а файл называется tablemodel.h. правда, смешно? Веселый
Спасибо, теперь понял  Улыбающийся
Записан
Mityai
Гость
« Ответ #10 : Август 12, 2010, 14:45 »

Ребят, спасибо большое за эту тему! Я наконец-то понял как QTableView связать с QAbstractTableModel Смеющийся
Записан
dee
Гость
« Ответ #11 : Декабрь 09, 2011, 14:21 »

Была аналогичная проблема.

Оказалось, при изменении objectName кнопки на форме (при магическом стечении обстоятельств по радиусу кривизны рук) была переименована не кнопка, а вся форма, в результате чего вылетало такое сообщение об ошибке.

Мораль:
БУДЬ ВНИМАТЕЛЕН!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 23.