--========GMX236301153461900564781 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Hi, I want to compile kdepimlibs with msvc (because kdebase needs it) and after some minor problems I now get a strange error in kcal. I've attached a small testcase to show the problem. The output with gcc: D - Recurrence::Observer::Observer() G - Incidence::Incidence() A - RecurrenceRule::Observer::Observer() E - Recurrence::Recurrence() F - void Recurrence::addObserver(Recurrence::Observer*) and msvc: A - RecurrenceRule::Observer::Observer G - Incidence::Incidence A - RecurrenceRule::Observer::Observer E - Recurrence::Recurrence F - Recurrence::addObserver As you can see, different constructors are called. In my understanding, both of them are correct. But I don't know what the c++ standard says about such an ambiguity. Any ideas how this could be solved without renaming one of the classes? Christian -- Echte DSL-Flatrate dauerhaft für 0,- Euro*! "Feel free" mit GMX DSL! http://www.gmx.net/de/go/dsl --========GMX236301153461900564781 Content-Type: text/plain; charset="iso-8859-15"; name="main.cpp" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="main.cpp" #include #ifndef __GNUC__ # define __PRETTY_FUNCTION__ __FUNCTION__ #endif class RecurrenceRule { public: class Observer { public: Observer() {fprintf(stderr, "A - %s\n", __PRETTY_FUNCTION__);} }; RecurrenceRule(){fprintf(stderr, "B - %s\n", __PRETTY_FUNCTION__);} void addObserver(Observer *) {fprintf(stderr, "C - %s\n", __PRETTY_FUNCTION__);} }; class Recurrence : public RecurrenceRule::Observer { public: class Observer { public: Observer() {fprintf(stderr, "D - %s\n", __PRETTY_FUNCTION__);} }; Recurrence() {fprintf(stderr, "E - %s\n", __PRETTY_FUNCTION__);} void addObserver(Observer *) {fprintf(stderr, "F - %s\n", __PRETTY_FUNCTION__);} }; class Incidence : public Recurrence::Observer { public: Incidence(); }; Incidence::Incidence() : Recurrence::Observer() { fprintf(stderr, "G - %s\n", __PRETTY_FUNCTION__); Recurrence *myRec = new Recurrence(); myRec->addObserver(NULL); // myRec->addObserver(this); // doesn't work with msvc } int main(int argc, char**argv) { Incidence *tmp = new Incidence(); delete tmp; return 1; } --========GMX236301153461900564781--