为啥 g++ 需要 -fpermissive 标志来在 c++ 中打印迭代器值? [关闭]
Posted
技术标签:
【中文标题】为啥 g++ 需要 -fpermissive 标志来在 c++ 中打印迭代器值? [关闭]【英文标题】:Why does g++ require -fpermissive flag for printing iterator value in c++? [closed]为什么 g++ 需要 -fpermissive 标志来在 c++ 中打印迭代器值? [关闭] 【发布时间】:2015-01-14 15:29:42 【问题描述】:对于以下 C++ 代码:
cout<<"First symbol is : "<<*it<<std::endl;
我收到以下错误:
Transformtheexpression.cpp:50:42: error: name lookup of 'it' changed for ISO 'for' scoping [-fpermissive]
cout<<"First symbol is : "<<*it<<std::endl;
^ Transformtheexpression.cpp:50:42: note: (if you use '-fpermissive' G++ will accept your code)
如果我通过运行来编译代码:
g++ -fpermissive然后代码编译。 请解释这种行为。
【问题讨论】:
请发帖MCVE。 您确定这不是您的for
-loop 中的错误吗?所以,请张贴围绕它的循环。见:Error message: name lookup of ‘jj’ changed for ISO ‘for’ scoping, (if you use ‘-fpermissive’ G++ will accept your code)
如果编译器输出警告,几乎总是你应该做的是修复你的代码,而不是禁用警告。特别是如果你是初学者。编译时产生警告的代码可能看起来可以工作,但它可能包含一个微妙的错误,只会等待在那里咬你。
我感觉它与我的代码有关。这就是为什么我把它放在这里。感谢您的投入。我在 2 分钟内得到了答案。伟大的!!!谢谢你们。
【参考方案1】:
您的 for 循环中可能有错误。
你可能用分号终止了你的 for 循环,它结束了“it”的范围。
它是 for 循环的局部变量。您正在尝试在循环之外使用它。
【讨论】:
看准!!谢谢。我现在实际上理解了错误声明。以上是关于为啥 g++ 需要 -fpermissive 标志来在 c++ 中打印迭代器值? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 g++ 需要 libstdc++.a?为啥不是默认值?
#ifdef 标志来区分 gcc 和 g++ 编译器? [复制]
如何强制 Netbeans 仅使用 -ggdb 编译标志而不使用它也自动发出 Makefile-Debug.mk 中的 -g 标志