Почему функции класса шаблона стандартной библиотеки С++ говорят неопределенную ссылку при связывании, если они определеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему функции класса шаблона стандартной библиотеки С++ говорят неопределенную ссылку при связывании, если они определе

Сообщение Anonymous »

При использовании с 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::open(wchar_t const*, std::_Ios_Openmode)'
код:

Код: Выделить всё

#include 
int main() {

std::ifstream f("x.cpp"); // works
f.close();
f.open(L"x.cpp"); // doesn't link

return 0;
}
даже если они определены в , ведь они включены в конец
Я ожидал, что код скомпилируется нормально, поскольку ifstream является классом шаблона и определен в заголовке.
Я проверил, есть ли в код, определяющий open( wchar_t const* __s, std::ios_base::openmode __mode) обнаруживается компилятором путем редактирования файла заголовка и помещения блока #error прямо над функцией, и компилятор находит if (что означает, что все ifdef прошли)
Может кто-нибудь объяснить, почему функции класса шаблона, определенные в заголовке, должны каким-то образом существовать в libstdc++
Я знаю, что mingw-w64 gcc компилятор работает с fstream open(wchar_t const* __s, std::ios_base::openmode __mode), но мне конкретно нужна версия msys

Подробнее здесь: https://stackoverflow.com/questions/793 ... erence-whi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»