C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Merkwürdiger Compilerfehler beim Überladen einer virtuellen

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Nils Schneider
Guest





PostPosted: Mon Mar 05, 2007 11:22 pm    Post subject: Merkwürdiger Compilerfehler beim Überladen einer virtuellen Reply with quote



Hallo Leute,

bin heute über einen merkwürdige Fehlermeldung meines Compilers
(Microsoft-Compiler von Visual Studio 2003) gestolpert, die ich mir nicht
erklären kann. Hier erstmal Code:

_________________________________________________schnipp
#include <stdio.h>

class classA
{
public:
virtual bool foo(int a, int b, int c)
{
return foo(a+c,b+c);
}
virtual bool foo(int a, int b)
{
return true;
}
};

class classB : public classA
{
public:
virtual bool foo(int a, int b)
{
printf( "Sinnloser Test - %u - %u\n", a,b);
return true;
}
};

int main(int argc, char* argv[])
{
classB myClass;
myClass.foo(1,2,3);

return 0;
}
_____________________________ schnapp

Wenn ich versuche diesen Code zu kompilieren, erhalte ich folgende
Fehlermeldung:

c:\dev\test\test\test.cpp(29) : error C2660: 'classB::foo' : function does
not take 3 arguments


Ich weiss, dass der Microsoft-Compiler sich ja öfter mal nicht komplett an
den ISO-Standard hält. Daher die Frage: Ist das nun ein Fehler in meinem
Code, oder ein Fehler des Compilers? Könnte jemand mein Beispiel evtl. mal
mit einem anderen Compiler testen? Meiner Meinung nach dürfte die Funktion
doch eindeutig auflösbar sein.

Der Aufruf funktioniert, wenn ich die Überladung in classB rausnehme. Der
Aufruf funktioniert auch dann, wenn ich mir eine Referenz auf classA caste
und dann erst aufrufe.

Nils
Back to top
Stefan Reuther
Guest





PostPosted: Tue Mar 06, 2007 12:21 am    Post subject: Re: Merkwürdiger Compilerfehler beim Üb erladen einer virtue Reply with quote



Nils Schneider wrote:
Quote:
class classA {
virtual bool foo(int a, int b, int c)
virtual bool foo(int a, int b)
};
class classB : public classA {
virtual bool foo(int a, int b)
};
int main(int argc, char* argv[]) {
classB myClass;
myClass.foo(1,2,3);
}

c:\dev\test\test\test.cpp(29) : error C2660: 'classB::foo' : function does
not take 3 arguments

Schau mal in die FAQ: <http://titanos.de/iso-c++/cpp%3Aname_hiding>

Du hast in classB eine Funktion namens foo, die dafür sorgt, dass der
Compiler nicht nach weiteren foo-Funktionen sucht.


Stefan
Back to top
Bob Hairgrove
Guest





PostPosted: Tue Mar 06, 2007 2:34 am    Post subject: Re: Merkwürdiger Compil erfehler beim Überl aden einer virtu Reply with quote



On Mon, 5 Mar 2007 18:22:31 +0100, "Nils Schneider"

<leiff (AT) versanet (DOT) de> wrote:



Quote:
int main(int argc, char* argv[])

{

classB myClass;

myClass.foo(1,2,3);



So könnte es klappen:

myClass.classA::foo(1,2,3);

Sonst müßte man auch foo(int,int,int) in classB überschreiben.



--

Bob Hairgrove

NoSpamPlease (AT) Home (DOT) com
Back to top
Lars Tetzlaff
Guest





PostPosted: Fri Mar 09, 2007 10:35 pm    Post subject: Re: Merkwürdiger Compilerfehler beim Üb erladen einer virtue Reply with quote

Nils Schneider wrote:

Quote:
c:\dev\test\test\test.cpp(29) : error C2660: 'classB::foo' : function does
not take 3 arguments


Ich weiss, dass der Microsoft-Compiler sich ja öfter mal nicht komplett an
den ISO-Standard hält. Daher die Frage: Ist das nun ein Fehler in meinem
Code, oder ein Fehler des Compilers? Könnte jemand mein Beispiel evtl. mal
mit einem anderen Compiler testen? Meiner Meinung nach dürfte die Funktion
doch eindeutig auflösbar sein.

Da hat der MIcrsoft Compiler schon recht.

Mit

class classB : public classA
{
public:

using A::foo;

virtual bool foo(int a, int b)
{
printf( "Sinnloser Test - %u - %u\n", a,b);
return true;
}
};

sollte es gehen.

Lars
Back to top
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
 


Powered by phpBB © 2001, 2006 phpBB Group