在'struct'错误之前预期','或'...'

时间:2018-05-14 08:59:55

标签: c++ qt c++11 struct

美好的一天,

我第一次遇到这种错误。

// 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&amp; operator&lt;&lt;(QDataStream&amp; out,const Item :: Interface&amp; interface)

2)another.h:34:17:错误:在'struct'之前预期的primary-expression
退出&lt;&lt; interface.id
                ^
another.h:34:17:错误:预期';'在'struct'之前 another.h:34:17:错误:在'struct'之前预期的primary-expression

2 个答案:

答案 0 :(得分:4)

代码中的某处,很可能是在库头中,以下(或与它非常相似的东西)隐藏:

#define interface struct

使编译器看到:

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

并且变得非常沮丧。

重命名参数。

答案 1 :(得分:0)

我发现错误的地方是变量“interface”的名称(来自小写字母)。 将其重命名为i,例如清除代码。

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

在命名空间中声明的类型Interface因此更改其名称不是结果。

所有

的Thx