fstream 在 Qt Creator 中不起作用

fstream does not function in Qt Creator

我是 Qt 的新手。我的项目用 Visual C++ 2010 Express Edition 编码,效果很好。然后,我想使用我已经在 Qt 控制台应用程序中创建的 .cpp 文件(类似于我在 VC++2010 中的项目)。编译在 "ofstream" 和 "ifstream" 处失败,出现此错误:

"no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(std::basic_strinstream<char>::_string_type)'"
"no matching function for call to 'std::basic_ifstream<char>::basic_ofstream(std::string&)'"

我已将 fstream 添加到 cpp 文件中,如下所示:

#include <QCoreApplication>
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;

失败的代码如下:

stringstream s1; s1 << "Estimated_NN_ThrMWh.csv";
ofstream outF1(s1.str());

顺便说一下,我使用 "MinGW 4.9.1 32bit" 作为我的编译器。问题是什么,我该如何解决?感谢您的帮助。

你应该总是这样写:

string s = s1.str();
ofstream outF1(s);

而且,在我看来,你的代码在 MSVC 下工作应该被认为是 MSVC 的一个错误(它允许非常量引用绑定到一个临时对象)。

您正在将 std::string 传递给 std::ofstream 构造函数。这是 a C++11 feature,要使用它,您需要将 -std=c++11 传递给 GCC 或 Clang。 MSVC 自动编译其混合的不完全 C++11 或编译器版本编译的任何其他语言。

如果您使用的是 Qt 5 的 qmake,则只需 CONFIG+=c++11 就可以了。否则你需要像

这样的东西
*gcc*:QMAKE_CXXFLAGS += -std=c++11

如果你不想依赖 C++11,请不要使用它,只需要这样做:

std::string filename("Estimated_NN_ThrMWh.csv");
std::ofstream outF1(filename.c_str());

这将始终有效。请注意,我删除了 stringstream,因为至少在您显示的短代码中,它是多余的。