ifstream没有用于初始化的匹配构造函数

时间:2019-04-24 14:41:18

标签: c++ qt qt-creator c++17

我正在使用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);
}

2 个答案:

答案 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;
}