This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: multiple inheritance abiguity


Hi all:

The only c++ I've done is followed examples from books, etc, however, I modified some code and the following works:

struct C1 {
        void f(double a){
        };
	void f(int a){
        };
};
class M{
        public:
                C1 gamma;
};
int main(void){
        double c1;
        M m;
        m.gamma.f(c1);
        return 0;
}

This indicates to me that the ambiguity is not in which function to call, but rather which struct to call the function on. The compiler keeps track of the expected argument to the function, but not which object has which function.. i.e., the code below produces the expected errors:

struct C1 {
        void f(double a){
        };
};
struct C2{
        void f(int a){
        };
};

class M{
        public:
                C1 gamma;
                C2 beta;
};

int main(void){
        double c1;
        M m;
        m.gamma.f(c1);
        m.beta.f(c1);
        return 0;
}


I hope I've finally given back to the community!


Blake









On Jan 18, 2006, at 8:16 PM, Perry Smith wrote:

I tried this on the IBM RS/6000 compiler (xlC) and it complains as well.

Good luck

On Jan 18, 2006, at 7:51 PM, Rich Johnson wrote:

Hi folks--

Compiling the following (with no options) produces an ambiguity error:
>>file: bug.cpp >>>>>>>>>
struct C1 { void f( double ){}; };
struct C2 { void f( int ){}; };


class M : public C1, public C2 {};

int main()
{
  double c1;
  M m;
  m.f(c1);
}
<<<<<<<<<<<<<<<<<
The specific error report is:
$ g++ bug.cpp -o bug
bug.cpp: In function `int main()':
bug.cpp:11: error: request for member `f' is ambiguous
bug.cpp:2: error: candidates are: void C2::f(int)
bug.cpp:1: error:                 void C1::f(double)

I've tried both g++(4.0.0 20041026) on Mac OS X 10.4.4, g++(4.0.3 20051201) on debian(powerpc) unstable. and g++-3.3.6 (Debian 1:3.3.6-10). All three report the same error.

Is the code proper C++? If not, what am I missing?
Given that there's there's only one method with a ''void f (double)" signature where's the source of the ambiguity?


Thnx
--rich




Blake Huff stangmechanic@gmail.com




Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]