Необъявленный идентификатор (включая заголовочный файл)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFile>
#include <QFileDialog>
#include <QTextStream>
#include <QStandardItemModel>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow{
    Q_OBJECT
public:
    Ui::MainWindow *ui;
    QList<QStringList> csv;
    QStandardItemModel *model;
    QList<QStandardItem*> standardItemList;
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_action_Open_triggered();
    void checkString(QString &temp, QChar ch = 0);
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QObject::connect(ui->Open, SIGNAL(clicked()),
                     this,SLOT(on_action_Open_triggered()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_action_Open_triggered()
{

    model = new QStandardItemModel(this);
    ui->tableView->setModel(model);

    QString fileName = QFileDialog::getOpenFileName(this, "Open CSV file",QDir::currentPath(), "csv (*.csv)");
    QFile file(fileName);

    if (file.open(QIODevice::ReadOnly))
    {

        QString data = file.readAll();
        data.remove(QRegExp("\r")); // remove all carriage return characters
        QString temp;
        QChar ch;
        QTextStream instream (&data);

        while (!instream.atEnd())
        {
            instream >> ch;
            if (ch == ',')
                checkString(temp, ch);
            else if (ch == '\n')
                checkString(temp, ch);
            else if (instream.atEnd())
            {
                temp.append(ch);
                checkString(temp);
            } else
                temp.append(ch);
        }
    }
}

void MainWindow::checkString(QString &temp, QChar ch)
{

    if (temp.count("\"")%2 == 0)
    {
        if (temp.startsWith(QChar('\"')) && temp.endsWith(QChar('\"')))
        {
            temp.remove(QRegExp("^\""));
            temp.remove(QRegExp("\"$"));
        }

        temp.replace("\"\"", "\"");
        QStandardItem *item = new QStandardItem(temp);
        standardItemList.append(item);

        if (ch != QChar(','))
        {
        }

        temp.clear();
    } else
        temp.append(ch);
}

void something()
{
    qDebug() << standardItemList;
}

Мне говорят стандартныйItemList, необъявленный идентификатор в функции something (почему не в функции контрольной строки?). Однако я включил mainwindow.h, в который входит определение стандартного списка элементов. имеет ли это какое-то отношение к стандартномуItemList, содержащему *item и объявленному в checkString


person user4217633    schedule 06.11.2014    source источник
comment
checkString является функцией-членом class MainWindow, а something — нет.   -  person n. 1.8e9-where's-my-share m.    schedule 06.11.2014
comment
Что вы очень много, это может быть довольно большой проблемой, пытаясь написать на C ++ после Java, так как есть так много всего, что нужно помнить, и так много чего упустить.   -  person user4217633    schedule 06.11.2014
comment
@user4217633 user4217633 Вы написали Java? Вы можете использовать Qt Jambi, созданный для пользователей Java.   -  person Tay2510    schedule 06.11.2014
comment
Спасибо за ссылку, похоже хорошая идея.   -  person user4217633    schedule 06.11.2014


Ответы (1)


#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFile>
#include <QFileDialog>
#include <QTextStream>
#include <QStandardItemModel>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow{
    Q_OBJECT
public:
    Ui::MainWindow *ui;
    QList<QStringList> csv;
    QStandardItemModel *model;
    QList<QStandardItem*> standardItemList;
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void on_action_Open_triggered();
    void checkString(QString &temp, QChar ch = 0);
    void something();
};

void MainWindow::something()
{
    qDebug() << standardItemList;
}

checkString является закрытым членом, поэтому вы не можете вызывать его вне класса, поэтому standardItemList не определен.

person deW1    schedule 06.11.2014
comment
Спасибо за ваш вклад :) - person user4217633; 06.11.2014