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

[C++] filesystem no matching for operator !=

Cloud VPS
0 głosów
1,555 wizyt
pytanie zadane 3 lutego 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
edycja 3 lutego 2019 przez Hiskiel

Cze.

Próbuję rozwiązać problem, który objawia się tym, że nie mogę napisać żadnego programu z elementami filesystem, gdyż wywala mi błąd:

[A bit of crap]
D:/mingw-w64/i686-7.3.0-posix-dwarf-rt_v5-rev0/mingw32/lib/gcc/i686-w64-mingw32/8.1.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()))
                               ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
[A lot of crap]

Szukałem trochę rozwiązań, widziałem jakieś trunki itd, ale nie za bardzo wiem jak tego użyć, co to w ogóle jest itd.

 

Gdyby ktoś wiedział jak to naprawić byłbym wdzięczny.

 

Pozdrawiam.

 

PS

Kod:

#include <fstream>                     
#include <iostream>                    
#include <filesystem>                  
                                       
namespace fs = std::filesystem;        
                                       
int main() {                           
     fs::create_directories("foo/bar");    
}                                      
                                       

Kompilacja:

g++ -std=c++1z -Wall -Wextra -Wunused  -Wmisleading-indentation -Wduplicated-cond -Wduplicated-branches -Wlogical-op -Wuseless-cast -pedantic-errors -O3 main.cpp -lstdc++fs

Kompilator:

g++ (i686-posix-dwarf-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 

1 odpowiedź

0 głosów
odpowiedź 3 lutego 2019 przez niezalogowany

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

Spróbuj pobrać nowszą wersję MinGW. Kod powinien wyglądać tak:

#include <fstream>                     
#include <iostream>                    
#include <filesystem>                  
                                        
namespace fs = std::filesystem;        
                                        
int main() {                           
     fs::create_directories(fs::path("foo") / fs::path("bar"));    
}                                      
komentarz 3 lutego 2019 przez Hiskiel Pasjonat (22,830 p.)
Nie chodzi tu o kod, tymbardziej, że z tego co pamiętam tam jest automatyczna konwersja.

I właśnie nie wiem co zrobić z tym trunkiem. To tylko plik PKGBUILD. Co mam z nim zrobić?
komentarz 3 lutego 2019 przez Hiskiel Pasjonat (22,830 p.)
Swoją drogą, tam nie miało być "foo"/bar tylko "foo/bar"
komentarz 4 lutego 2019 przez niezalogowany

Możesz zainstalować VS, albo Clang. Z VS na pewno nie ma takich problemów.

Tak poprawiony kod jest sensowniejszy. Przedtem myślałem, że chcesz sprawdzić jak działa operator / std::filesystem::path. Automatyczna konwersja nie będzie działać jeżeli priorytet nakazuje wykonanie operatora / dla const char[].

Podobne pytania

0 głosów
1 odpowiedź 211 wizyt
0 głosów
1 odpowiedź 711 wizyt
0 głosów
2 odpowiedzi 6,882 wizyt
pytanie zadane 25 lipca 2016 w C i C++ przez MatrixBMW Początkujący (360 p.)

93,453 zapytań

142,448 odpowiedzi

322,718 komentarzy

62,831 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

Kursy INF.02 i INF.03
...