为啥 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++ 中打印迭代器值? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

链接程序时是不是需要重复编译标志?

如何在本地安装 Angular CLI(不带 -g 标志)

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

#ifdef 标志来区分 gcc 和 g++ 编译器? [复制]

如何强制 Netbeans 仅使用 -ggdb 编译标志而不使用它也自动发出 Makefile-Debug.mk 中的 -g 标志

为啥A-star算法需要g(n)?