5

我遇到了 qt foreach 和具有多个模板参数的模板的问题。

QVector<Node<T, U> > nodes;
...
[append some data]
...
foreach(const Node<T, U>& node, nodes) {
  ...
}

我收到此错误:

error: use of undeclared identifier 'Q_FOREACH'

我猜这是由于,模板中的,因为 Qt 宏在另一个模板声明中没有检测到它。如何在不使用普通 for 循环或 C++11 的情况下解决这个问题?

4

1 回答 1

10

如果你的编译器支持 C++11,你可以使用

foreach(auto node, nodes) { ... }

甚至

for(auto node: nodes) { ... }

否则,您可以强制预处理器忽略模板中的逗号,如下所示:

#define COMMA ,
foreach(const Node<T COMMA U>& node, nodes) { ... }

或者你可以使用 typedef

typedef Node<T, U> NodeTU;
foreach(const NodeTU& node, nodes) { ... }
于 2013-01-08T14:06:18.740 回答