Базовый операнд '-›' имеет тип QStandardItemModel, не являющийся указателем.

Я не на 100% уверен в своем понимании указателей.

У меня есть код, который дает мне следующую ошибку:

базовый операнд '->' имеет тип без указателя 'QStandardItemModel'

Вот соответствующий код:

stocklist.h

class StockList
{
public:
    void populateStockModel();
private:
    QStandardItemModel m_stockModel;
};

stocklist.cpp

void StockList::populateStockModel() {
    foreach(Item* item, m_items) {
        QList<QStandardItem*> newRow;

        QStandardItem* stockID = new QStandardItem(QString("%1").arg(item->stockID()));
        QStandardItem* desc = new QStandardItem(QString("%1").arg(item->stockID()));
        QStandardItem* price = new QStandardItem(QString("%1").arg(item->stockID()));

        newRow.append(stockID);
        newRow.append(desc);
        newRow.append(price);

        m_stockModel->appendRow(newRow);
    }
}

Ошибка относится к строке, содержащей m_stockModel->appendRow(newRow);.

Есть идеи, как я могу это решить? Я в основном пытаюсь заполнить модель, используя эти значения элементов.

Помощь будет очень признательна! Благодарю вас!


person Barry Michael Doyle    schedule 13.02.2017    source источник


Ответы (2)


Сразу видно - m_stockModel это QStandardItemModel, и у него нет operator->().

Вероятно, вы хотели написать m_stockModel.appendRow() или объявить m_stockModel указателем на QStandardItemModel. Без полного примера трудно быть уверенным, какой именно.

Вы, вероятно, также захотите улучшить свою безопасность исключений - если выделение price не удастся, вы утечете stockID и desc.

person Toby Speight    schedule 13.02.2017

Чтобы m_stockModel считался указателем, вам нужно объявить его как таковой, используя нотацию звездочки:

QStandardItemModel * m_stockModel;

Вам также потребуется выделить память для m_stockModel с помощью оператора new перед вызовом его функций.

Я рекомендую изучить основы указателей в C++.

person gortsu    schedule 13.02.2017