Не могу создать объекты std :: vector из std :: ofstream - PullRequest
0 голосов
/ 05 марта 2019

Я пытаюсь создать вектор ofstream, но он не работает.

std::vector<std::ofstream> files(10);

Программа перестает работать после этой строки.

auto createFiles(int n)
{
    std::vector<std::ofstream> files;
    for(int i=0; i<n; ++i)
    {
        std::string fileName("Card" + std::to_string(i+1) + ".txt");
        files.emplace_back(fileName);
        if(!files[i]) throw std::runtime_error("Could not open file " + fileName);
    }
    return files;
}

Я пробовалтаким образом, но это тоже не работает.(программа перестает работать после первого выполнения files.emplace_back(fileName);)

Редактировать: версия 1, не работает:

#include <fstream>
#include <vector>

auto createFiles(int n)
{
    std::vector<std::ofstream> files;
    for(int i=0; i<n; ++i)
    {
        std::string fileName("Card" + std::to_string(i+1) + ".txt");
        files.emplace_back(fileName); // fails here at runtime
    }
    return files;
}

int main()
{
    auto files = createFiles(10);
}

И версия 2, тоже не работает:

#include <fstream>
#include <vector>

auto createFiles(int n)
{
    std::vector<std::ofstream> files(n); // fails here at runtime
    for(int i=0; i<n; ++i)
    {
        std::string fileName("Card" + std::to_string(i+1) + ".txt");
        files[i].open(fileName);
    }
    return files;
}

int main()
{
    auto files = createFiles(10);
}

Редактировать 2: Решено, проблема появляется только с GCC 8.2.0

...