简体   繁体   中英

Cannot compile c++ program including filesystem

I have written a very simple c++ program:

#include<filesystem>
using namespace std::filesystem;

int main(){
    return 0;
}

At first, I compiled it with

g++ -c main.cpp -o main.o

and got following errors:

main.cpp:2:22: error: 'filesystem' is not a namespace-name
 using namespace std::filesystem;
                  ^~~~~~~~~~
main.cpp:2:32: error: expected namespace-name before ';' token
 using namespace std::filesystem;
                                ^

I read that I just need to put -std=c++17 in after -c for also compile all the new stuff in c++17.
But when I do so, I get hundreds of errors like:

C:/Program Files/CodeBlocks/MinGW/lib/gcc/i686-w64-mingw32/8.1.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:/Program Files/CodeBlocks/MinGW/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()))

or

C:/Program Files/CodeBlocks/MinGW/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h: At global scope:
C:/Program Files/CodeBlocks/MinGW/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h:511:18: error: specialization of 'std::filesystem::__cxx11::path::__is_encoded_char<wchar_t>' after instantiation
 struct path::__is_encoded_char<wchar_t> : std::true_type  

and many more. Can anybody tell me what I did wrong. The libraries and the compiler are downloaded with the codeBlocks installer, so they should normally be wright.
Thank you in advance!

no match for 'operator!=' (operand types are 'std::filesystem::__cxx11::path' and 'std::filesystem::__cxx11::path')

this is a bug in mingw 8.1.0. the bug report: https://sourceforge.net/p/mingw-w64/bugs/737

This is fixed in version 9.x, you need to upgrade mingw to a newer version (9.0+)

I have written a very simple c++ program:

#include<filesystem>
using namespace std::filesystem;

int main(){
    return 0;
}

At first, I compiled it with

g++ -c main.cpp -o main.o

and got following errors:

main.cpp:2:22: error: 'filesystem' is not a namespace-name
 using namespace std::filesystem;
                  ^~~~~~~~~~
main.cpp:2:32: error: expected namespace-name before ';' token
 using namespace std::filesystem;
                                ^

I read that I just need to put -std=c++17 in after -c for also compile all the new stuff in c++17.
But when I do so, I get hundreds of errors like:

C:/Program Files/CodeBlocks/MinGW/lib/gcc/i686-w64-mingw32/8.1.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:/Program Files/CodeBlocks/MinGW/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()))

or

C:/Program Files/CodeBlocks/MinGW/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h: At global scope:
C:/Program Files/CodeBlocks/MinGW/lib/gcc/i686-w64-mingw32/8.1.0/include/c++/bits/fs_path.h:511:18: error: specialization of 'std::filesystem::__cxx11::path::__is_encoded_char<wchar_t>' after instantiation
 struct path::__is_encoded_char<wchar_t> : std::true_type  

and many more. Can anybody tell me what I did wrong. The libraries and the compiler are downloaded with the codeBlocks installer, so they should normally be wright.
Thank you in advance!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM