隐式实例化未定义模板:basic_fstream <string>

时间:2016-10-05 01:18:48

标签: c++

我使用clang / llvm 8.0.0在macOS上编译它。编译C ++ 14。

#include <fstream>
#include <string>

using namespace std;

basic_fstream<string> open_file(string file);

int main()
{
    basic_fstream<string> f = open_file("test");
    f.close();
}

basic_fstream<string> open_file(string file) {
    basic_fstream<string> f;
    f.open(file);

    if(!f.is_open()) {
        f.clear();
        f.open(file, ios_base::out);
        f.close();
        f.open(file);
    }

    return f;
}

它产生一个很长的错误列表,但第一个是:

implicit instantiation of undefined template 'std::__1::codecvt<std::__1::basic_string<char>, char, __mbstate_t>'
__always_noconv_ = __cv_->always_noconv();

1 个答案:

答案 0 :(得分:1)

basic_fstream的模板参数是字符类型,而不是字符串类型。例如,C ++实现支持的典型字符类型为basic_fstream<char>basic_fstream<wchar_t>

但为什么要使用这个模板?只需使用std::fstream,a.k.a。std::basic_fstream<char>;或std::wfstream,a.k.a。std::basic_fstream<wchar_t>

get rid of using namespace std; while your at ithttp://gomagames.com/blocks/blocks_sassy.html也不会有任何伤害。