0 c++ qt compiler-errors compilation syntax-error
我很抱歉用这样一个"有意义"的标题问一个问题,但是我无法得到编译器抱怨的内容,代码工作正常,我添加了一个额外的方法,一切都破了.删除最后的更改并没有解决它.
class NodeWrapper : public QObject {
Q_OBJECT
Q_ENUMS(NodeType NodeStatus)
Q_PROPERTY(NodeType type READ type WRITE setType NOTIFY typeChanged)
Q_PROPERTY(QString typeString READ typeString NOTIFY typeChanged)
Q_PROPERTY(NodeStatus status READ status WRITE setStatus NOTIFY statusChanged)
public:
NodeWrapper(QObject * parent = 0) : QObject(parent) { }
enum NodeType {
T_NODE,
T_FOLDER
};
enum NodeStatus {
S_OK,
S_WARNING,
S_ERROR
};
// type
inline NodeType type() { return _type; }
inline QString typeString() { return metaObject()->enumerator(0).key(type()); }
inline void setType(NodeType v) {
if (_type != v) {
_type = v;
emit typeChanged();
}
}
// status
inline NodeStatus status() { return _node.getStatus(); }
inline void setStatus(NodeStatus v) {
if (_node.getStatus() != v) {
_node.setStatus(v);
emit statusChanged();
}
}
signals:
void typeChanged();
void statusChanged();
private:
NodeType _type;
Node _node;
};
Run Code Online (Sandbox Code Playgroud)
错误从枚举S_OK成员开始NodeStatus:
error: expected identifier before '(' token
S_OK,
^
error: expected '}' before '(' token
error: expected ')' before numeric constant
S_OK,
^
error: 'NodeType' does not name a type
inline NodeType type() { return _type; }
^
error: 'metaObject' was not declared in this scope
inline QString typeString() { return metaObject()->enumerator(0).key(type()); }
^
error: 'type' was not declared in this scope
inline QString typeString() { return metaObject()->enumerator(0).key(type()); }
^
...
Run Code Online (Sandbox Code Playgroud)
猜测你<windows.h>在这个定义之前无意中包含了这个定义,它通过#define将S_OK重新定义为一个数字,从而导致枚举中的编译错误.全局命名空间中的这种混乱是C兼容性的一个不幸后果,实际上最安全的选择是重命名字段(也许是S_SUCCESS?)