This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: C++ constructors called as args
could you post the whole code, because this compiles fine:
class A {
// forward decl
};
class B {
public:
B( const A& a ) {}
B( const B& b ) {}
};
class C {
public:
void F1( A a ) { F2(a); }
void F2( B b ) {}
};
int main(void) {
C c;
A a;
c.F1(a);
return 0;
}
plus I don't see why you pass arguments to F1() and F2 by value.. is it intended?
m.
On Sun, 02 Mar 2003 23:56:33 -0800
Michael Hunley <mhunley at pocketpurchase dot com> wrote:
>I will post this to the news groups as well, if this is not the correct
>place to ask this question my humble apologies.
>
>I am working under RedHat Linux 8.0 which reports I am using GCC 3.2-7
>(which does not seem to match the GNU gcc versioning, but...). I have
>3.2.2, but have not deployed yet.
>
>I am brand new to linux and gcc and am trying to port an app from Windows
>written in C++ using MSVC 6.
>
>I have some simple class combinations that effectively look like:
>
>class A; // forward decl
>
>class B {
> B( const A& a );
> B( const B& b );
>};
>
>class C {
> void F1( A a ) { F2(a); }
> void F2( B b );
>};
>
>I get several errors from the above situation, apparently because g++ does
>not like calling the constructor to create a temp B from an A. One of the
>messages is that it did do it, but the code does not compile. The only fix
>I can find is to change F1 to look like:
> void F1( A a ) { B b(a); F2(b); }
>Which would seem like what the compiler ought to do automatically
>anyway. Instead I get a main error that:
> Cannot find B::B(B)
>
>I have searched the docs and the news groups and can't seem to find any
>docage on this. Is there a compile switch I need to get the auto creation
>of the temp? Is there another work around besides changing all the code
>that does that sort of thing to create my own temp explicitly? BTW: this
>code compiles fine under MSVC 6 and Kylix 3.
>
>thanks in advance.
>
>Michael Hunley
>Senior Engineer
>PocketPurchase, Inc.
>