• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Clion + GCC problem z filesystem

Object Storage Arubacloud
0 głosów
486 wizyt
pytanie zadane 25 listopada 2019 w C i C++ przez SimiVoid Pasjonat (19,790 p.)
zamknięte 26 listopada 2019 przez SimiVoid

Witam, podczas kompilacji wywala mi następujący błąd, spowodowany dołączeniem biblioteki filesystem:

====================[ Build | Double_Fight | Debug ]============================
C:\Users\szytr\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\192.7142.39\bin\cmake\win\bin\cmake.exe --build D:\Projekty\Double-Fight\cmake-build-debug --target Double_Fight -- -j 6
[ 33%] Building CXX object CMakeFiles/Double_Fight.dir/src/App.cpp.obj
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\filesystem:37,
                 from D:\Projekty\Double-Fight\src\App.cpp:5:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h: In member function 'std::filesystem::__cxx11::path& std::filesystem::__cxx11::path::operator/=(const std::filesystem::__cxx11::path&)':
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:237:47: error: no match for 'operator!=' (operand types are 'std::filesystem::__cxx11::path' and 'std::filesystem::__cxx11::path')
    || (__p.has_root_name() && __p.root_name() != root_name()))
                               ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\iosfwd:40,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ios:38,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ostream:38,
                 from D:/Projekty/Double-Fight/include/SFML/System/Err.hpp:32,
                 from D:/Projekty/Double-Fight/include/SFML/System.hpp:34,
                 from D:/Projekty/Double-Fight/include/SFML/Window.hpp:32,
                 from D:/Projekty/Double-Fight/include/SFML/Graphics.hpp:32,
                 from D:\Projekty\Double-Fight\src\App.h:3,
                 from D:\Projekty\Double-Fight\src\App.cpp:1:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\postypes.h:221:5: note: candidate: 'template<class _StateT> bool std::operator!=(const std::fpos<_StateT>&, const std::fpos<_StateT>&)'
     operator!=(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs)
     ^~~~~~~~
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\postypes.h:221:5: note:   template argument deduction/substitution failed:
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\filesystem:37,
                 from D:\Projekty\Double-Fight\src\App.cpp:5:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:237:60: note:   'std::filesystem::__cxx11::path' is not derived from 'const std::fpos<_StateT>'
    || (__p.has_root_name() && __p.root_name() != root_name()))
                                                            ^
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_algobase.h:64,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\char_traits.h:39,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ios:40,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ostream:38,
                 from D:/Projekty/Double-Fight/include/SFML/System/Err.hpp:32,
                 from D:/Projekty/Double-Fight/include/SFML/System.hpp:34,
                 from D:/Projekty/Double-Fight/include/SFML/Window.hpp:32,
                 from D:/Projekty/Double-Fight/include/SFML/Graphics.hpp:32,
                 from D:\Projekty\Double-Fight\src\App.h:3,
                 from D:\Projekty\Double-Fight\src\App.cpp:1:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_pair.h:456:5: note: candidate: 'template<class _T1, class _T2> constexpr bool std::operator!=(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)'
     operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
     ^~~~~~~~
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_pair.h:456:5: note:   template argument deduction/substitution failed:
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\filesystem:37,
                 from D:\Projekty\Double-Fight\src\App.cpp:5:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:237:60: note:   'std::filesystem::__cxx11::path' is not derived from 'const std::pair<_T1, _T2>'
    || (__p.has_root_name() && __p.root_name() != root_name()))
                                                            ^
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_algobase.h:67,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\char_traits.h:39,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ios:40,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ostream:38,
                 from D:/Projekty/Double-Fight/include/SFML/System/Err.hpp:32,
                 from D:/Projekty/Double-Fight/include/SFML/System.hpp:34,
                 from D:/Projekty/Double-Fight/include/SFML/Window.hpp:32,
                 from D:/Projekty/Double-Fight/include/SFML/Graphics.hpp:32,
                 from D:\Projekty\Double-Fight\src\App.h:3,
                 from D:\Projekty\Double-Fight\src\App.cpp:1:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_iterator.h:311:5: note: candidate: 'template<class _Iterator> constexpr bool std::operator!=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)'
     operator!=(const reverse_iterator<_Iterator>& __x,
     ^~~~~~~~
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_iterator.h:311:5: note:   template argument deduction/substitution failed:
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\filesystem:37,
                 from D:\Projekty\Double-Fight\src\App.cpp:5:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:237:60: note:   'std::filesystem::__cxx11::path' is not derived from 'const std::reverse_iterator<_Iterator>'
    || (__p.has_root_name() && __p.root_name() != root_name()))
                                                            ^
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_algobase.h:67,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\char_traits.h:39,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ios:40,
                 from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\ostream:38,
                 from D:/Projekty/Double-Fight/include/SFML/System/Err.hpp:32,
                 from D:/Projekty/Double-Fight/include/SFML/System.hpp:34,
                 from D:/Projekty/Double-Fight/include/SFML/Window.hpp:32,
                 from D:/Projekty/Double-Fight/include/SFML/Graphics.hpp:32,
                 from D:\Projekty\Double-Fight\src\App.h:3,
                 from D:\Projekty\Double-Fight\src\App.cpp:1:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_iterator.h:349:5: note: candidate: 'template<class _IteratorL, class _IteratorR> constexpr bool std::operator!=(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)'
     operator!=(const reverse_iterator<_IteratorL>& __x,
     ^~~~~~~~
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\stl_iterator.h:349:5: note:   template argument deduction/substitution failed:
In file included from c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\filesystem:37,
                 from D:\Projekty\Double-Fight\src\App.cpp:5:
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\bits\fs_path.h:237:60: note:   'std::filesystem::__cxx11::path' is not derived from 'const std::reverse_iterator<_Iterator>'
    || (__p.has_root_name() && __p.root_name() != root_name()))
                                                   

(Jest tego jeszcze więcej, ale jest limit długości posta)

Nie wiem co jest tego powodem. Dodam, że przy nowo stworzonym projekcie i załączeniu wyżej wymienionej biblioteki pojawia się ten sam problem.

komentarz zamknięcia: Udało się rozwiązać ten problem poprzez skorzystanie z funkcji zawartych w WinApi

2 odpowiedzi

0 głosów
odpowiedź 25 listopada 2019 przez mokrowski Mędrzec (155,460 p.)

Aby obsłużyć std::filesystem, należy linkować bibliotekę. Dodaj do wywołań kompilatora:

-lstdc++fs

 

komentarz 25 listopada 2019 przez mokrowski Mędrzec (155,460 p.)
Ogólnie MinGW32 nie jest polecany. Masz ładnie działający MinGW-W64 i to mogę polecić jako działający toolchain dla MS Windows 10.
komentarz 25 listopada 2019 przez adrian17 Ekspert (344,860 p.)
mokrowski, opcja linkowania raczej nie pomoże z błędem kompilacji ;)
komentarz 25 listopada 2019 przez SimiVoid Pasjonat (19,790 p.)
Skąd mogę pobrać ten toolchain dla Windowsa 10?
komentarz 25 listopada 2019 przez mokrowski Mędrzec (155,460 p.)

Wykonaj z uwagą.

Pozostanie Ci jedynie dodanie narzędzi do swojego IDE.

Instrukcja instalacji MinGW-w64 w systemie MS Windows

1. Zainstaluj pakiet msys2: http://repo.msys2.org/distrib/x86_64/msys2-x86_64-20190524.exe

2. Po instalacji uruchomi się on w konsoli. Wykonaj polecenie uaktualnienia środowiska:

   pacman -Suy

   Po zakończeniu uaktualnienia, w okienku konsoli pojawi się prośba o jego zamknięcie. Zamknij okienko.
   Uruchom MSYS2 MinGW 64-bit wybierając je z menu start (wybierz precyzyjnie: MSYS2 MinGW 64-bit a nie żaden inny) i zainstaluj narzędzia programistyczne:
...
   pacman -S base-devel.
   pacman -S mingw-w64-x86_64-toolchain

   Pytanie o (domyślnie=wszystkie) potwierdź enterem.

   Możesz sprawdzić obecność kompilatora przez:

   gcc -v

   Zamknij okienko.

3. Do ścieżki PATH systemu dodaj następujące wpisy. Do tych ustawień dostaniesz się poprzez:
   Eksplorator->prawy klawisz na "Ten komputer" -> Właściwości -> Zaawansowane ustawienia systemu
   -> Zmienne środowiskowe. Wybierz Path i Edytuj. Dodaj wpisy:

   C:\msys64\mingw64\bin
   C:\msys64\usr\bin

   Z pomocą klawisza "Przenieś w górę", umieść je na samej górze wpisów.

komentarz 25 listopada 2019 przez mokrowski Mędrzec (155,460 p.)

@adrian17, nie wiem.. ze względu na "takie numery", od dawna nie używam MinGW32. Miał tak dużą ilość błędów i nieścisłości, że od dawna używam MinGW-W64 i bardzo sobie chwalę :-)

0 głosów
odpowiedź 25 listopada 2019 przez adrian17 Ekspert (344,860 p.)

Patrz tu:

https://sourceforge.net/p/mingw-w64/bugs/737/

https://forum.pasja-informatyki.pl/411566/c-filesystem-no-matching-for-operator (dokładnie ten sam błąd, ładnie był guglowalny)

Wygląda na to, że dopiero GCC 9 to naprawił? Możesz też ewentualnie spróbować inne dystrubycje MinGW (https://nuwen.net/mingw.html), albo... Visual Studio :)

Podobne pytania

0 głosów
1 odpowiedź 521 wizyt
0 głosów
1 odpowiedź 1,195 wizyt
pytanie zadane 3 lutego 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 128 wizyt
pytanie zadane 6 lutego 2019 w Systemy operacyjne, programy przez Hiskiel Pasjonat (22,830 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...