为什么我需要在main中编写std :: ios :: sync_with_stdio?

时间:2015-07-07 07:39:14

标签: c++ ios gcc

如果我写:

#include <iostream>

using namespace std;

main(){
    ios::sync_with_stdio(false);

    cout << "hi";
}

然后,程序编译正确,但如果我写:

#include <iostream>

using namespace std;

ios::sync_with_stdio(false);

main(){
    cout << "hi";
}

然后GCC产生以下错误:

  

错误:专门成员&#39; std :: basic_ios :: sync_with_stdio&#39;需要&#39;模板&lt;&gt;&#39;句法            IOS :: sync_with_stdio(假);

这个错误意味着什么,以及如何纠正它(如果可能的话)?

2 个答案:

答案 0 :(得分:2)

如果在main()之外写行template<>,编译器会将其解释为函数声明。然后它抱怨缺少bool result = std::ios::sync_with_stdio(true);

要调用该函数,您需要编写如下内容:

bool std::ios_base::sync_with_stdio(bool sync) { //do something return true; }

要重新定义静态函数,您需要编写如下内容:

<link rel="stylesheet" href="styles/kendo.default.min.css">
<link rel="stylesheet" href="styles/kendo.common.min.css">
<link rel="stylesheet" href="styles/kendo.rtl.min.css"/>
<link rel="stylesheet" href="styles/admin.css">
<script type="text/javascript" src="scripts/jquery.min.js"></script>
<script type="text/javascript" src="scripts/kendo.web.min.js"></script>

答案 1 :(得分:1)

纠正

std::ios_base::sync_with_stdio(false);

或者对于像cin这样的特定流,您可以

cin.sync_with_stdio(false);

它应该在函数内部,因为它不是一个表达式。