[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: Strange problem with msvc in kdepimlibs/kcal
From: "Christian Ehrlicher" <Ch.Ehrlicher () gmx ! de>
Date: 2006-07-21 6:05:00
Message-ID: 20060721060500.236300 () gmx ! net
[Download RAW message or body]
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
["main.cpp" (text/plain)]
#include <stdio.h>
#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;
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic