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,因为至少在您显示的短代码中,它是多余的。
我是 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,因为至少在您显示的短代码中,它是多余的。