• 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

0 głosów
800 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 (158,960 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 (158,960 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 Mentor (354,880 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 (158,960 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 (158,960 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 Mentor (354,880 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ź 1,040 wizyt
0 głosów
1 odpowiedź 1,691 wizyt
pytanie zadane 3 lutego 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 329 wizyt
pytanie zadane 6 lutego 2019 w Systemy operacyjne, programy przez Hiskiel Pasjonat (22,830 p.)

93,720 zapytań

142,641 odpowiedzi

323,264 komentarzy

63,268 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...