ожидаемое ',' или '...' перед ошибкой 'struct' - PullRequest
0 голосов
/ 14 мая 2018

Добрый день,

У меня впервые такая ошибка.

// another.h
struct Item {
  QString name = QString();
  QString description = QString();
  QVariant value = QVariant();
  struct Interface {
    uint id = 0;
    uint pos = 0;
  } mkio, uks;
  struct Element {
    float weight = 0;
    struct Range {
      uint from = 0;
      uint to = 0;
    } range;
  int index = 0;
} element;
};

Я хотел бы сохранить эту вложенную структуру в потоке. Таким образом,

// another.h
QDataStream &operator<<(QDataStream &out, const Item::Interface &interface)
{
  return out << interface.id
             << interface.pos;
}
// and another overload operator>> and operator<<...
// Another fields of the `Item` struct are compiling without any error.

1) ошибка: ожидается ',' или '...' перед 'struct' QDataStream & operator << (QDataStream & out, const Item :: Interface & interface) </p>

2) another.h: 34: 17: ошибка: ожидаемое первичное выражение перед структурой
вернуть << interface.id <br> ^
another.h: 34: 17: ошибка: ожидается ';' до 'struct'
another.h: 34: 17: ошибка: ожидаемое первичное выражение перед 'struct'

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я нашел не то место, это имя переменной «interface» (из маленькой буквы). Переименовав его в i, например, очистите код.

QDataStream &operator<<(QDataStream &out, const Item::Interface &i /*nterface*/)

Тип Interface объявлен в пространстве имен, поэтому изменение его имени не принесло результата.

Спасибо за все??

0 голосов
/ 14 мая 2018

Где-то в коде, скорее всего в заголовке библиотеки, скрывается следующее (или что-то очень похожее):

#define interface struct

, что заставляет компилятор увидеть это:

QDataStream &operator<<(QDataStream &out, const Item::Interface &struct)
{
  return out << struct.id
             << struct.pos;
}

и очень расстраиваюсь.

Переименуйте параметр.

...