No that is not the problem.
No that is not the problem.
Hi all,
Was my question absurd ?
I am unable to find the clue for this, this is a big issue in my application. The same was runnig fine on Windows but unable to compile on LINUX
Could we see the exact and complete (including file name and line numbers) error message?
MDIWindow2D.cxx:1665: error: expected unqualified-id before numeric constant
Can you post the entire code section?
Let's say lines 1660 - 1680?
Hey, I think I found something.
Take a look at this article: http://braincore.blogspot.com/2005_11_01_archive.html
I'm talking about:
I'm not saying that you have exactly the same problem but it's worth investigating further.cpp: preprocessing can bite
Ready for a new type of post? cpp? What is it? Well, KDE and Qt are primarily written in C++. I do have experience in that language. And sometimes a question pops up that begs for an answer.So here goes.
qnamespace.h:833: error: expected identifier before numeric constant
qnamespace.h:833: error: expected unqualified-id before numeric constant
Say what? Pretty cryptic error message. So, what's happening in qnamespace.h at that particular line?// documented in qcursor.cpp
enum CursorShape {
ArrowCursor,
UpArrowCursor,
CrossCursor,
....
Line 833 is the one that starts with the enum. At this point, the problem still evaded me. So, let's have a look at the source that is compiled. It contained among others these lines#include "config.h" // HAVE_LIBXSS
#ifdef HAVE_LIBXSS // Idle detection.
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/scrnsaver.h>
#include <fixx11h.h>
#endif // HAVE_LIBXSS
#include <kapplication.h>Well, after undefining HAVE_LIBXSS after the inclusion of the config header, the error went away. Hmmm. Could it be that somewhere in the X11 headers the name CursorShape is used? So, fire up a konsole, navigate to the directory holding the relevant headers and execute find . -type f | xargs grep CursorShapewhich turns up#define CursorShape 0 /* largest size that can be displayed */Aha! The plot thickens. Because when this is preprocessed before the enum in qnamespace.h, that particular enum will come out like enum 0 {... which is obviously not a good thing.This is a classic case of how preprocessing can bite a programmer and yield an error message that seems totally unrelated to what is actually wrong. So, the solution is to change the order in which headers are included. In this particular case that meant moving the X11 headers to the end of the #include stanzas.
Now, before you start falling all over me that this is not a solution, yes, I know it is not a proper solution. I'm aware of the fact that if one uses CursorShape after having included the X11 headers, I will get exactly the same trouble. In this case, that didn't happen. And for now, the code works.
Update -- I should have known. No, this piece is not about how to fix it, it is about how preprocessing can bite you. And yes - #undef CursorShape would be an alternate approach but equally bad. And no - including fixx11.h didn't.
Judging from what I've read about this error, it appears because there is an already processed macro with the same name of a symbol you're using in your file.
So it would be better to post some code, maybe someone spots the error.
Regards
Last edited by marcel; 28th May 2007 at 16:43.
Hi marcel,
It is not possible to put the whole code.
void MyTextBox::ProcessText()
{
char command[]="Line",num[10];
int pnts[20];
int k=0,j=0;
for(int i=0;i<str.length();i++)
{ QChar ch=this->str.at(i);
if(i<4)
command[i]=ch.toAscii();
if(isdigit(ch.toAscii()))
num[j++]=ch.toAscii();
if( i>4 && (ch == Qt::Key_Comma || ch==Qt::Key_Space ) )
{ num[j]=0;
pnts[k++]=atoi(num);
j=0;
}
}
num[j]=0;
pnts[k]=atoi(num);
QString s="";
s.append(command);
QPoint P[]={ QPoint(pnts[0],pnts[1]), QPoint(pnts[2],pnts[3]) };
if(s=="Line")
myView->DrawLine(P[0],P[1]);
else if(s=="Circ")
myView->DrawCircle(P[0],pnts[2],pnts[3]);
else if(s=="Bezi")
{ if((k+1)%2==0)
myView->DrawBezier(pnts,k+1);
else
{
QMessageBox *p=new QMessageBox(this);
p->setText("Invalid Input, Check Help");
p->setIcon(QMessageBox::Information);
p->show();
}
}
else
{
QMessageBox *p=new QMessageBox();
p->setText("No such command exist, Check Help");
p->setIcon(QMessageBox::Information);
p->show();
}
str="";
prevstr="";
QKeyEvent *e=new QKeyEvent(QEvent::KeyPress,65,Qt::NoModifier,QStri ng("> "));
keyPressEvent(e);
}
where "MyTextBox" is inherited from QTextBox
And are you positive that the error is from that line, where you create the QKeyEvent?
And what about this?
Qt Code:
To copy to clipboard, switch view to plain text mode
There is still a space in the middle of QString.
Jpn also asked this, and now you have the same error? How is this a copy-paste error?
Regards
I still cannot spot the error.
Does it compile if you remove that line?
Apart from the problem you have, this is not correct:
Qt Code:
keyPressEvent(e);To copy to clipboard, switch view to plain text mode
keyPressEvent is not meant to be called like that.
Use qApp->postEvent instead.
Regards
Hi Marcel,
Could you get some clue? I have traced that due to QEvent::KeyPress, the error is coming, Compiler is unable to recognize the the keyword.
Could you post the include section from that file?
All the includes.
Regards
Hi,
I'm using Qt4.1, and I had the same problem and I have resolved it with an include and a replacement :
#include <QKeyEvent> //that's very important
(QEvent::Type)6 instead of QEvent::KeyPress
example :
KeyEvent* kevent = new QKeyEvent((QEvent::Type)6,buffer[0],(Qt::KeyboardModifiers)Qt::NoModifier,buffer,fals e,1);
I hope it will help someone.
You sure don't have to use such ugly C-style casts when you have the necessary include directive in place.
Qt Code:
#include <QKeyEvent> ...To copy to clipboard, switch view to plain text mode
J-P Nurmi
I don't understand why you don't use enum Qt::Key for second parameter in QKeyEvent ctor?
The problem is likely that you are including X.h which has
Qt Code:
// X.11.h ... ... #define KeyPress 2To copy to clipboard, switch view to plain text mode
So the preprocessor is converting this to...
Qt Code:
To copy to clipboard, switch view to plain text mode
Try adding
Qt Code:
#undef KeyPress // safe as long as you are not referencing KeyPress from X.h after this lineTo copy to clipboard, switch view to plain text mode
i.e. assuming that further down you won't be referring to KeyPress from X.h
Why are you replying to a nearly 12 year old thread? Please check the date of the last post in a thread before bringing one back from the dead.
<=== The Great Pumpkin says ===>
Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.
Bookmarks