Qt 5.5 - QList variable causes compilation to fail
-
Hi guys, I'm trying to include a QList member variable in my class, e.g.
QList<QString> m_myList;
I have included all the relevant classes, ie. <QList>, <QString>, etc, and I have QT += core in my make file, but the compilation always fails with the message:
expected member name or ';' after declaration specifiers
QList<QString> m_myList;
–––––^I have tried everything I can think of to get it to work. I feel like I'm making a very fundamental mistake somewhere! Any ideas?
-
Your error may be coming line previous to this line. Just check. I don't see any issue with above line of code.
-
I wish it was that easy, but if that line is commented out, the rest of the program runs perfectly.
-
@knight556 said:
And the
#include <QList>
#include <QString>are in the .H file ?
with the class having the m_mylist?
Are you using Creator and a pro file or how do you build the project ?
-
The includes are in the .cpp file, and yes I'm using Creator with a pro file. I've noticed that if I declare a QList within a class method then it compiles just fine, it's only when I try and declare it as a member variable that it complains.
-
Hi and welcome to devnet,
Not a direct answer but since you want a QList of QString, why not use QStringList ?
-
@knight556
HiBut if you declare m_list in the H file you must have
#include <QList>
#include <QString>in the H file (and not cpp file ) or the type is unknown :)
Its not enough to include in CPP file.I have noticed that if I declare a QList within a class method ...
Yes as you included the files in the cpp I guess.
-
This post is deleted! -
@mrjj Moving the includes to the .h file didn't help.
@SGaist Yes the QStringList does in fact work, but what I have failed to mention (for simplicity) is that this bug is occurring for all data types, eg. QList<int> fails as well. As it turns out I want to use my own custom class as the list type, but I can't hope to get that working until I get the QList working with more basic data types first!
Creator is clearly happy with QList being used, because if I start typing on the next line something like:
m_mylist.
the autocomplete/intellisense/whatever-it's-called will give me the option of append(), so something is working correctly! -
Oh ok. sorry for assuming it was that basic thing,
Can we try a simple test just to be sure compiler not funky?
If you create a new console project and then
right click -> add new -> Header file and call it thehappylist.h
and put code below in thehappylist.h#ifndef THEHAPPYLIST #define THEHAPPYLIST #include <QList> #include <QString> class Happy { public: QList<QString> m_list; }; #endif // THEHAPPYLIST
and then the main.cpp
#include "thehappylist.h" int main(int argc, char *argv[]) { Happy h; h.m_list.append("test"); }
And tell me if that compiles ?
-
@mrjj said:
#include "thehappylist.h"
int main(int argc, char *argv[])
{
Happy h;
h.m_list.append("test");
}Hi, yes it does compile... which is frustrating because that doesn't help find the problem.
-
HI
Well, its not an include path thing then.
Since the mini sample works.Would it be possible to post your code ?
I really can not get a clue of what could be wrong as you have the includes
and it all sounds ok. -
I'm working on quite a large project (it's basically a DICOM image viewer), but I will attempt to create a minimal working example.
-
OK now this is weird. I'm not sure how I came to this, but instead of writing:
QList<QString> m_mylist;
I write:
::QList<QString> m_mylist
It compiles and works... however Qt Creator doesn't seem to like it as the terms QList and QString are not coloured purple as normal.
Any ideas why this works? -
@knight556 said:
OK now this is weird. I'm not sure how I came to this, but instead of writing:
QList<QString> m_mylist;
I write:
::QList<QString> m_mylist
It compiles and works... however Qt Creator doesn't seem to like it as the terms QList and QString are not coloured purple as normal.
Any ideas why this works?- Did you redefine "QList" somewhere else in your code?
- Does this only happen in this particular class, or does it also happen if you add a QList member to other classses?
-
Well that got me thinking, so I had a look and for some reason in another one of my classes I had listed a forward reference to QList. I have now deleted that line of code and the rest of the program compiles and works as expected, without needing the extra :: bits at the start of the QList declaration!
So... clearly I don't understand forward references. Thanks for the help everyone! -
It's pretty unusual to forward declare QList, why did you do that in the first place ?
-
I was learning Qt through a series of Pluralsight videos and the instructor was basically forward declaring every class he was gonna use, so I got into that habit. Time to go back and remove some of that rubbish.
-
Even QString ?
-
Yep even QString. Is forward referencing even necessary if you put all your includes in the header file? I always thought forward referencing was only needed if you had 2 classes that referenced one another, but of course 1 had to be defined before the other.