我正在使用QT Creator和MinGW(均为最新版本),并且无法让ifstream使用c ++ 17中添加的path参数构造函数。
编译以下代码将失败,并显示以下信息:
no matching constructor for initialization of 'std::ifstream'
我的QT .pro文件中有CONFIG += c++17
,还有LIBS += -lstdc++fs
MCV https://gcc.godbolt.org/z/Lb3MNT
#include <experimental/filesystem>
#include <fstream>
int main() {
const std::experimental::filesystem::path my_path = "C:/";
std::ifstream input_file_stream(my_path);
}
答案 0 :(得分:2)
@ user1406186,我复制了您的相同错误,并能够将以下更改应用于.pro
文件来进行编译,并且必须指定我需要使用的QMAKE
:
TEMPLATE = app
CONFIG += console c++11
QMAKE_CXXFLAGS += -std=gnu++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp
HEADERS +=
LIBS += -lstdc++fs
它还使用以下C ++ 14 / C ++ 11标准进行编译:
TEMPLATE = app
CONFIG += console c++14
QMAKE_CXXFLAGS += -std=gnu++14
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp
HEADERS +=
LIBS += -lstdc++fs
答案 1 :(得分:0)
#include<string>
#include<experimental\filesystem>
using namespace std;
using namespace experimental::filesystem;
int main()
{
path soure{current_path()};
soure /="test.txt";
ifstream input{u8path(soure).u8string()};
if(!input)
{
cout<<"source file not exist"<<endl;
}
path dest{current_path()};
dest /="test-copy.txt";
ofstream output{u8path(dest).u8string()};
string line;
while(!getline(input,line).eof())
{
output<<line<<endl;
}
input.close();
output.close();
return 0;
}