This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: compile error when initializing descendant struct
Mike,
In C++, structs can be initialized in such a way: please see
section 5.7 in TC++PL.
Although your solution is correct, I want to instantiate the structs
in reside in the .rodata section of the DSO,
which cannot be done by using the output of a function call.
Dave
On Wed, Apr 9, 2008 at 6:34 PM, Young, Michael <Michael.Young@paetec.com> wrote:
> Maybe I'm wrong, but this doesn't appear to be valid C++ to me... you're
> using a construct that's normally used for array initialization - I
> don't think it's valid for initializing an object (instead, use a ctor).
> Object layout is not guaranteed to be the same as an "array" of the data
> members (even if the members are the same datatype, except for perhaps
> PODs), but even if it the same, I don't believe you can use array
> initialization syntax just because the memory layout is the same.
>
> Here's what I think you want to do:
>
>
> struct A {
> int x;
> };
>
> struct B : public A {
>
> B( int arg_x, int arg_y ) : y( arg_y ) { x = arg_x ; }
>
> int y;
> };
>
> const B b( 1, 2 );
>
> I don't have g++ working on this machine at the moment, but this at
> least compiles on another C++ compiler.
> Note that you could also give A a ctor that initializes x, and then
> initialize the base class in the initialization list of B ctor (instead
> of doing the assignment of x in the body of B's ctor).
>
> HTH,
> Mike
>
>
>
> -----Original Message-----
> From: gcc-help-owner@gcc.gnu.org [mailto:gcc-help-owner@gcc.gnu.org] On
> Behalf Of Dave Bender
> Sent: Wednesday, April 09, 2008 6:07 PM
> To: gcc-help@gcc.gnu.org
> Subject: compile error when initializing descendant struct
>
> Dear list,
> When I attempt to compile the following code (test2.cpp):
>
>
> struct A {
> int x;
> };
>
> struct B : public A {
> int y;
> };
>
> const B b = {1, 2};
>
>
> g++ gives the following error:
>
> test2.cpp:9: error: scalar object 'b' requires one element in
> initializer
>
> My goal is to incorporate a large set of structs in a DSO (so that they
> reside in the read only section). I don't see why this code should not
> compile.
>
> Thanks,
> -Dave
>