C ++ std :: cin赢得了main()

时间:2016-11-25 01:41:25

标签: c++ cin

在第一个代码块中,编译器没有错误。另一方面,第二个代码块给出错误error: 'cin' in namespace 'std' does not name a type

第一段代码:

#include <iostream>

int y;

int main(){
std::cout << "Enter something! \n";
std::cin >> y;
}

第二段代码:

 #include <iostream>

 int y;

 int main(){
 std::cout << "Enter something! \n";

 }

 std::cin >> y;

导致这种行为的原因是什么?我能解决它吗?

如果您需要更多详细信息,请随时在评论中提问。

2 个答案:

答案 0 :(得分:7)

C ++的工作方式,你不能在函数之外拥有可执行代码。当第一个块编译时,编译器会查看类似这样的程序:

  1. 好的,是时候开始这个节目了!让我们看看main()
  2. 好的,打印"Enter something! \n"
  3. 现在等待用户输入并将其存储在y
  4. 好的,main()现在已经完成,而且还没有任何其他功能......猜猜程序结束了!
  5. main()以外没有任何事情可以担心,所以我已经完成了。
  6. 第二个块的问题在于编译器只进入第2步。然后它会想到:

    1. 嗯,main()已完成
    2. main()之外注意什么?
    3. 哦,这看起来像是一种新型宣言。但事实并非如此。
    4. 发生错误!
    5. 如果您正在上课或自学C ++,您将在学习后期遇到结构和课程,这些将使这更有意义。它们是编译器尝试将其解释为的语法的一个示例。

答案 1 :(得分:2)

您在C \ C ++的基本语法中失败。

std::cin >> y;是一个声明。声明不允许在函数体之外,只有声明。编译器尝试将该行视为声明和声明中的第一个标记是类型说明符。因此,您确实收到了错误消息。