使用时
<fstream>
具有
g++ -D_GLIBCXX_HAVE__WFOPEN=1 -D_GLIBCXX_USE_WCHAR_T=1
(msys2-gcc 13.3.0)它抛出一个错误
/usr/lib/gcc/x86_64-pc-msys/13.3.0/../../../../x86_64-pc-msys/bin/ld: /tmp/cceEWaVo.o:x.cpp:(.text+0x50): undefined reference to `std::basic_ifstream<char, std::char_traits<char> >::open(wchar_t const*, std::_Ios_Openmode)'
代码:
#include <fstream>
int main() {
std::ifstream f("x.cpp"); // works
f.close();
f.open(L"x.cpp"); // doesn't link
return 0;
}
即使是你,他们也被定义在
<bits/fstream.tcc>
女巫被包括在结尾
<fstream>
我原本期望代码能够正常编译,因为ifstream是一个模板类,并且是在头文件中定义的。
我检查了代码是否输入
<bits/fstream.tcc>
这定义了
open(wchar_t const* __s, std::ios_base::openmode __mode)
编译器通过编辑头文件并在函数正上方放置一个#error块来检测if(这意味着所有的ifdef都被传递了)
有人能解释一下为什么头定义的模板类函数也需要以某种方式存在于libstdc中吗++
我知道mingw-w64gcc编译器适用于fstream
open(wchar_t常量*__s,std::ios_base::openmode__mode)
但我特别需要微软的版本