C++ ifstream 的类型不完整

C++ ifstream has incomplete type

我正在修改要将输出写入文件的项目。在我的 .hpp 文件中,我声明了一个文件流,如下所示:

// fname.hpp file
#include <fstream>

std::ifstream m_ifs = ("path_to_file");

然后在我的 .cpp 文件上

// fname.cpp
if (!m_ifs.is_open()) {
      std::cerr << "Not writing to file" << std::endl;
      return;
}
m_ifs << "Write something"

但是当我编译时出现以下错误:

error: field ‘m_ifs’ has incomplete type ‘std::ifstream {aka std::basic_ifstream<char>}’

/usr/include/c++/5/iosfwd:116:11: note: declaration of ‘std::ifstream {aka class std::basic_ifstream<char>}’
     class basic_ifstream;

错误指向我在 hpp 文件中的声明。

我在网上找到的解决方案都没有解决问题。


以下有效:

// fname.hpp file
#include <fstream>

const std::string m_file = ("path_to_file");
std::fstream m_fs;

// fname.cpp
m_fs.open(m_file.c_str());
if (!m_fs.is_open()) {
      std::cerr << "Not writing to file" << std::endl;
      return;
}
m_fs << "Write something"

对我来说它看起来像一个全局变量。如果确实如此,请按以下方式声明它们:

//fname.hpp:
const std::string m_file = ("path_to_file");
std::fstream m_fs;

// fname.cpp
m_fs.open(m_file.c_str());
if (!m_fs.is_open()) {
      std::cerr << "Not writing to file" << std::endl;
      return;
}
m_fs << "Write something"

此外,您不能写入 ifstream。将其更改为 ofstream 或 fstream。

看来您混淆了 ifstream 和 ofstream。正如评论中所述,std::ifstream 没有定义运算符 <<.

您要查找的输出文件是 std::ofstream。记住 o 是输出,i 是输入