C ++没有在Codeblocks

时间:2015-11-25 08:07:22

标签: c++ codeblocks ifstream

我试图在代码块中编译这个简单的C ++程序:

#include <string>
#include <fstream>
#include <streambuf>
#include <sstream>

std::ifstream t("C:/Windows/System32/drivers/etc/hosts-backup.txt");
std::stringstream buffer;
buffer << t.rdbuf();

我收到了这个错误:

  

|| === Build:在hostapp2中调试(编译器:GNU GCC编译器)=== |

     

C:\ Users \ Flights Trainer \ Desktop \ hostapp2 \ main.cpp | 7 | error:&#39; buffer&#39;没有命名类型|

     

|| ===构建失败:1个错误,0个警告(0分钟,0秒(秒))=== |

我一直在谷歌搜索&#34;没有命名类型&#34;整晚和我发现的所有内容都指向在宣布之前使用课程,但我不明白我在做什么。

我做错了什么?

2 个答案:

答案 0 :(得分:5)

你不能在C ++中的文件范围内放置任意语句,你需要把它们放在一个函数中。

#include <string>
#include <fstream>
#include <streambuf>
#include <sstream>

int main () {
    //These are now local variables
    std::ifstream t("C:/Windows/System32/drivers/etc/hosts-backup.txt");
    std::stringstream buffer;

    //We can write expression statements because we're in a function
    buffer << t.rdbuf();
}

答案 1 :(得分:2)

如果您的代码与您所写的一样,那么您就可以获得乐趣。由于它不是函数中的代码,因此您可以基本声明变量,类和函数 - 这些都可以在全局范围内完成。

//Global variable with type ifstream, named t
std::ifstream t("C:/Windows/System32/drivers/etc/hosts-backup.txt");
//Global variable with type stringstream, named buffer
std::stringstream buffer;
//Global variable with type buffer... Em what?!
buffer << t.rdbuf();

这就是你得到的错误。在C ++中,您可以编写仅在函数中执行的语句。