![](/i/fill.gif) |
![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Isn't it legal to put a class declaration in the same .cpp file where you
define its member functions and the main() that's the only routine that uses it?
When I did that, I got errors about not being able to find the vtable for
the class.
Is #include supposed to work just like a textual include? Is this something
funky with the Qt preprocessing stuff?
--
Darren New, San Diego CA, USA (PST)
Insanity is a small city on the western
border of the State of Mind.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
On Fri, 12 Jun 2009 20:22:16 +0200, Darren New <dne### [at] san rr com> wrote:
> Isn't it legal to put a class declaration in the same .cpp file where
> you define its member functions and the main() that's the only routine
> that uses it?
You can put the entire program in a single file if you want.
> When I did that, I got errors about not being able to find the vtable
> for the class.
Possibly some internal compiler problem (which might be triggered by a
syntactical problem in your code).
> Is #include supposed to work just like a textual include?
Yes.
--
FE
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Fredrik Eriksson wrote:
>> Is #include supposed to work just like a textual include?
> Yes.
OK. I think the problem is that Qt runs the code through a preprocessor for
various reasons, and it was probably not running the .cpp stuff thru, just
the .h stuff.
--
Darren New, San Diego CA, USA (PST)
Insanity is a small city on the western
border of the State of Mind.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Fredrik Eriksson <fe79}--at--{yahoo}--dot--{com> wrote:
> > Is #include supposed to work just like a textual include?
> Yes.
With two minor exceptions:
1) Certain compiler-dependent #pragmas may change the behavior of #include
slightly. The most common one is "#pragma once".
2) __FILE__ will expand to the name of the header file if it appears in
it, rather than the source file where it's #included. Likewise for __LINE__.
Thus if either identifier is used in a header file, its behavior will be
different than if you copy-pasted the contents of the header file to the
source file.
(The exception is if either identifier is used in a preprocessor macro, in
which case they are interpreted only after expanding the macro instantiation.)
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New <dne### [at] san rr com> wrote:
> When I did that, I got errors about not being able to find the vtable for
> the class.
A minimal example code would help a lot answering the question.
--
- Warp
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Warp wrote:
> Fredrik Eriksson <fe79}--at--{yahoo}--dot--{com> wrote:
>>> Is #include supposed to work just like a textual include?
>
>> Yes.
>
> With two minor exceptions:
Good point, thanks! Neither of which was the problem, which seems to be
specific to Qt, which runs its own preprocessors. But thanks for the
clairifications.
--
Darren New, San Diego CA, USA (PST)
Insanity is a small city on the western
border of the State of Mind.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Warp wrote:
> Darren New <dne### [at] san rr com> wrote:
>> When I did that, I got errors about not being able to find the vtable for
>> the class.
>
> A minimal example code would help a lot answering the question.
Yeah. I solved it before I asked the question. I was just trying to figure
out if it was normal C++ stuff or QT stuff. Once I got confirmed that
#include in C++ was essentially the same as in C (modulo leaving off .h), I
went grubbing around QT and figured out there's a macro it only expands in
.H files with the "moc" processor.
--
Darren New, San Diego CA, USA (PST)
Insanity is a small city on the western
border of the State of Mind.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New wrote:
> Isn't it legal to put a class declaration in the same .cpp file where
> you define its member functions and the main() that's the only routine
> that uses it?
>
> When I did that, I got errors about not being able to find the vtable
> for the class.
>
> Is #include supposed to work just like a textual include? Is this
> something funky with the Qt preprocessing stuff?
>
Perfectly legal.
As far as Qt is concerned... are you running moc by yourself?
You known, qmake uses the HEADERS variable to look for Q_OBJECT classes.
If your private class contains that macro, just try and include the
generated .moc directly.
Something like:
source.cpp:
class my_private_implementation
{
Q_OBJECT
/* neat stuff */
};
#include "source.moc"
--
Jonathan.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
JRG wrote:
> As far as Qt is concerned... are you running moc by yourself?
> You known, qmake uses the HEADERS variable to look for Q_OBJECT classes.
I see. No, I'm a Qt newbie. I just worked out this weekend how to compile
something outside of the Qt subdirectories. :-) {To be fair, it's
cross-compiled from a VM to a piece of hardware that doesn't have any
keyboard or mouse, so it's not like it's trivial.}
> If your private class contains that macro, just try and include the
> generated .moc directly.
Cool. It's easy enough to put it in a separate .h file. It just surprised
me. Looking at it, I thought Q_OBJECT was a #define, not some tag for a
separate preprocessor.
You know something else that surprises me? That I can screw up the
compilation enough to get G++ outputting assembler that the assembler
doesn't understand. I can't imagine why I can invoke G++ with arguments
that, in one execution, would compile C++ to assembly, then pass that
assembly to the assembler for the wrong architecture. Weird.
--
Darren New, San Diego CA, USA (PST)
Insanity is a small city on the western
border of the State of Mind.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
Darren New wrote:
> Cool. It's easy enough to put it in a separate .h file. It just surprised
> me. Looking at it, I thought Q_OBJECT was a #define, not some tag for a
> separate preprocessor.
I believe it's both.
Post a reply to this message
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |
| ![](/i/fill.gif) |
|
![](/i/fill.gif) |
|
![](/i/fill.gif) |
| ![](/i/fill.gif) |