我想用 - Wall -O2
和-std=c++0x
进行编译。当我在没有-Wall -02
的情况下进行编译时,我有:typeof was undeclared in this scope
和it was undeclared in this scope
。当我编译我的代码而没有需要-std=c++0x
的部分代码时,一切都还可以,但我想要这部分。怎么了?
需要- Wall -O2
的代码:
for(typeof(g[node].begin()) it = g[node].begin(); it != g[node].end(); ++it)
需要-std=c++0x
的代码:
auto biggest = std::max_element(std::begin(koszty), std::end(koszty));
和
avg = accumulate(czasy.begin(), czasy.end(), 0) / czasy.size();
答案 0 :(得分:2)
没有名为typeof
的此类运算符或关键字或标准函数。您似乎正在尝试使用C ++ 11 decltype
构造。
更好的方法是使用auto
:
for(auto it = g[node].begin(); it != g[node].end(); ++it)
或者可能是range-based for
loop:
for (auto& val : g[node]) { ... }
就像评论所说,你想要使用的选项不是不相容的,如果需要或想要的话,可以使用它们。
答案 1 :(得分:0)
ISO C ++中没有提到标识符typeof
。这是a GNU extension for C and C++
。它与-Wall
(控制警告的选项)或-O2
(控制优化的选项)无关。如果确实需要,您应该使用-std=gnu++0x
代替-std=c++0x
来启用GNU方言。
但是,似乎没必要。由于您使用的是C ++ 0x(现在是C ++ 11),因此关键字decltype
是typeof
的正确替代品。但在这里,为了清晰起见,我建议使用auto
。