filesystem in C++17 and Q_OBJECT conflicts
-
wrote on 23 Nov 2021, 09:31 last edited by jronald
Env
Qt 6.2.1
LinuxSample
CMakeLists.txt
... set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) ...
C++ code
#include <filesystem> #include <QApplication> class MyApp : public QApplication { Q_OBJECT ... }
Error
usr/include/c++/11.1.0/bits/fs_fwd.:39:1: error: Parse error at "std"
More Info
If remove#include <filesystem>
, it builds successfully.
EDIT
If#include <filesystem>
after#include <QApplication>
, the problem disappers, why?#include <QApplication> #include <filesystem>
-
wrote on 23 Nov 2021, 13:35 last edited by
This is a bug in MOC: https://bugreports.qt.io/browse/QTBUG-73263 what they suggest is to reorder the includes as you already figured out
-
Env
Qt 6.2.1
LinuxSample
CMakeLists.txt
... set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) ...
C++ code
#include <filesystem> #include <QApplication> class MyApp : public QApplication { Q_OBJECT ... }
Error
usr/include/c++/11.1.0/bits/fs_fwd.:39:1: error: Parse error at "std"
More Info
If remove#include <filesystem>
, it builds successfully.
EDIT
If#include <filesystem>
after#include <QApplication>
, the problem disappers, why?#include <QApplication> #include <filesystem>
wrote on 23 Nov 2021, 10:38 last edited by JonB@jronald said in filesystem in C++17 and Q_OBJECT conflicts:
Parse error at "std"
Purely at a guess
<filesystem>
needs<std>
stuff to be included first?<QApplication>
includes that so makes it work if included before<filesystem>
? Or something along those lines. Does not sound like that should be so, but it's what you describe as behaviour....usr/include/c++/11.1.0/bits/fs_fwd.:39:1: error: Parse error at "std"
I am surprised that path does not start with
/usr
? I am no expert, but should a C++17 be including ac++/11.1.0
header file, is that a possible issue?Actually your error is reported at https://stackoverflow.com/questions/69407237/qt-moc-errorusr-include-c-10-bits-fs-fwd-39-parse-error-at-std one month ago. Not sure what the "solution" is, but that's the issue....
-
Env
Qt 6.2.1
LinuxSample
CMakeLists.txt
... set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) ...
C++ code
#include <filesystem> #include <QApplication> class MyApp : public QApplication { Q_OBJECT ... }
Error
usr/include/c++/11.1.0/bits/fs_fwd.:39:1: error: Parse error at "std"
More Info
If remove#include <filesystem>
, it builds successfully.
EDIT
If#include <filesystem>
after#include <QApplication>
, the problem disappers, why?#include <QApplication> #include <filesystem>
@jronald
what compiler (version) are you using? -
wrote on 23 Nov 2021, 12:31 last edited by
@jronald said in filesystem in C++17 and Q_OBJECT conflicts:
But <std> doesn't exist.
I didn't say it did, I was talking conceptually. In any case since you know
#include <QApplication> #include <filesystem>
works, use that. Else you'll have to follow the discussion in that stackoverflow post.
-
wrote on 23 Nov 2021, 12:36 last edited by
Hi,
I use filesystem from stdlib without trouble. And without using QApplication in same file.
I suspect that errormessage from first post depends on files included before "filesystem" (not mentioned in your post).
The given line from error message looks like:
namespace std _GLIBCXX_VISIBILITY(default)
So may be 'namespace' has been declared as a macro or that GLib-Token does not exists. I can't imagine of other errors.
The include-file "std" (without extension) is a boost include file.
so may be, something is mixed without intention?
-
@jronald
what compiler (version) are you using?wrote on 23 Nov 2021, 12:55 last edited by@raven-worx said in filesystem in C++17 and Q_OBJECT conflicts:
@jronald
what compiler (version) are you using?g++ 11.1.0
-
Hi,
I use filesystem from stdlib without trouble. And without using QApplication in same file.
I suspect that errormessage from first post depends on files included before "filesystem" (not mentioned in your post).
The given line from error message looks like:
namespace std _GLIBCXX_VISIBILITY(default)
So may be 'namespace' has been declared as a macro or that GLib-Token does not exists. I can't imagine of other errors.
The include-file "std" (without extension) is a boost include file.
so may be, something is mixed without intention?
wrote on 23 Nov 2021, 13:00 last edited by@django-Reinhard said in filesystem in C++17 and Q_OBJECT conflicts:
Hi,
I use filesystem from stdlib without trouble. And without using QApplication in same file.
I suspect that errormessage from first post depends on files included before "filesystem" (not mentioned in your post).
The given line from error message looks like:
namespace std _GLIBCXX_VISIBILITY(default)
So may be 'namespace' has been declared as a macro or that GLib-Token does not exists. I can't imagine of other errors.
The include-file "std" (without extension) is a boost include file.
so may be, something is mixed without intention?
To reproduce the problem, two conditions must be meeted:
#include <filesystem>
before#include <QApplication>
MyApp
must inlcudeQ_OBJECT
-
@django-Reinhard said in filesystem in C++17 and Q_OBJECT conflicts:
Hi,
I use filesystem from stdlib without trouble. And without using QApplication in same file.
I suspect that errormessage from first post depends on files included before "filesystem" (not mentioned in your post).
The given line from error message looks like:
namespace std _GLIBCXX_VISIBILITY(default)
So may be 'namespace' has been declared as a macro or that GLib-Token does not exists. I can't imagine of other errors.
The include-file "std" (without extension) is a boost include file.
so may be, something is mixed without intention?
To reproduce the problem, two conditions must be meeted:
#include <filesystem>
before#include <QApplication>
MyApp
must inlcudeQ_OBJECT
wrote on 23 Nov 2021, 13:05 last edited by JonB@jronald
You can keep asking questions and have others make guesses if you wish, but I have already given you the stackoverflow post which shows this error and indicates where the problem lies (i.e. in the toolchain).As it states there, the error comes from
moc
. And that is only invoked if you have aQ_OBJECT
macro present. It also tells you the problem lies in cmake (which is what you are using), but not in qmake. Hence your findings.I'll leave you to it now.
-
wrote on 23 Nov 2021, 13:35 last edited by
This is a bug in MOC: https://bugreports.qt.io/browse/QTBUG-73263 what they suggest is to reorder the includes as you already figured out
-
@django-Reinhard said in filesystem in C++17 and Q_OBJECT conflicts:
Hi,
I use filesystem from stdlib without trouble. And without using QApplication in same file.
I suspect that errormessage from first post depends on files included before "filesystem" (not mentioned in your post).
The given line from error message looks like:
namespace std _GLIBCXX_VISIBILITY(default)
So may be 'namespace' has been declared as a macro or that GLib-Token does not exists. I can't imagine of other errors.
The include-file "std" (without extension) is a boost include file.
so may be, something is mixed without intention?
To reproduce the problem, two conditions must be meeted:
#include <filesystem>
before#include <QApplication>
MyApp
must inlcudeQ_OBJECT
-
@jronald
Hi, Here is something else: there is no <filesystem> file on my installation? How do I get this?Regards
Frik Brits.@britsfp What compiler do you have?
You need C++17 capable compiler and also C++17 needs to be activated in pro file when using g++/MinGW (CONFIG += c++17). -
@britsfp What compiler do you have?
You need C++17 capable compiler and also C++17 needs to be activated in pro file when using g++/MinGW (CONFIG += c++17). -
@jsulm I am using Qt 6.2.1. In the Kits's Compile tab It has gcc 7 and gcc 10 for C programs.
For C++ compiler it has g++ 7 and g++ 10I could always change the soft link in /usr/bin ??
@britsfp said in filesystem in C++17 and Q_OBJECT conflicts:
I could always change the soft link in /usr/bin ??
There is no need for such hacks.
Simply define the compiler in your Kit in QtCreator. -
@britsfp said in filesystem in C++17 and Q_OBJECT conflicts:
I could always change the soft link in /usr/bin ??
There is no need for such hacks.
Simply define the compiler in your Kit in QtCreator. -
@jsulm
Ok So must both C and C++ be version 10?, I supose so ? - and what is this #include <filesystem> error I get from the qfile.h header?@britsfp C doesn't matter most of the time, unless you want to compile C code.
But usually should point to same compiler version."and what is this #include <filesystem> error I get from the qfile.h header?" - as I said already: you need a compiler which supports C++17 standard and you need to enable this standard in your pro file.
https://en.cppreference.com/w/cpp/filesystem -
@jsulm
Ok So must both C and C++ be version 10?, I supose so ? - and what is this #include <filesystem> error I get from the qfile.h header?
1/18