我正在开发一个执行fileIO的Windows VC ++ 2008程序,并遇到了一个非常奇怪的问题。在我的#include指令中我有
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
然后我有一个实际执行fileIO的方法,但是当我尝试打开这样的文件时:
std::ofstream Output;
Output.open("Output/log.txt", ios::out);
我的intelisense允许它,甚至有正确的自动完成,但我的编译器抛出错误:
1>c:...\engine\gsp420maincore\gsp420maincore\messagequeue.cpp(141) : error C2653: 'ios' : is not a class or namespace name
1>c:...\engine\gsp420maincore\gsp420maincore\messagequeue.cpp(141) : error C2065: 'out' : undeclared identifier
当我读到ofstream.open()时,它指出要打开的文件是用于输入,输出还是两者都应该被指定,但ios应该由任何其他iostream #include指令自动包含,这个插入以下内容时问题未得到纠正:
#include <ios> // directive
当我删除第二个参数时,编译器没有抱怨,但我知道我应该尝试,并指定以防万一我想进入并读取文件以及写入它。我做错了什么?
答案 0 :(得分:4)
看起来您忘了在std::
前面添加前缀,并且您没有使用using namespace std;
(根据您明确说明std::ofstream
的命名空间这一事实来判断。)
尝试将其更改为std::ios::out
。
您不需要手动#include <ios>
。
答案 1 :(得分:2)
如前所述,您需要std::ios::out
- 只有您根本不需要它。当您打开ofstream
时,默认情况下会打开输出(同样,默认情况下会打开ifstream
以进行输入)。我还建议在创建时初始化对象,而不是创建一种未初始化的流,然后单独打开它。考虑到这一点,您可以获得相当简单的代码:
std::ofstream Output("output/log.txt");