 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Nils Schneider Guest
|
Posted: Mon Mar 05, 2007 11:22 pm Post subject: Merkwürdiger Compilerfehler beim Überladen einer virtuellen |
|
|
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
|
Posted: Tue Mar 06, 2007 12:21 am Post subject: Re: Merkwürdiger Compilerfehler beim Üb erladen einer virtue |
|
|
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
|
Posted: Tue Mar 06, 2007 2:34 am Post subject: Re: Merkwürdiger Compil erfehler beim Überl aden einer virtu |
|
|
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
|
Posted: Fri Mar 09, 2007 10:35 pm Post subject: Re: Merkwürdiger Compilerfehler beim Üb erladen einer virtue |
|
|
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 |
|
 |
Powered by phpBB © 2001, 2006 phpBB Group
|