Hallo,
ik heb een probleem bij het compileren van een van m'n templated classes. Om een reden die ik niet begrijp wordt onderstaande code niet gecompileerd en krijg ik deze foutmelding:
Zowel onder GCC als onder MSVC krijg ik vergelijkbare foutmeldingen, dus wellicht is het geen compiler bug o.i.d. maar een fundamentele C++ fout.
Overigens, als ik
vervang door:
compileert de code zonder problemen.
Iemand enig idee wat hier aan de hand is?
ik heb een probleem bij het compileren van een van m'n templated classes. Om een reden die ik niet begrijp wordt onderstaande code niet gecompileerd en krijg ik deze foutmelding:
De code waar het om draait:qed.cpp: In instantiation of `B<Foo*>':
qed.cpp:40: instantiated from here
qed.cpp:29: error: conflicting return type specified for `const T B<T>::Test()
const [with T = Foo*]'
qed.cpp:14: error: overriding `virtual const Foo* A::Test() const'
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| #include <iostream>
struct Foo {
int val;
};
class A {
public:
A( void ) {
}
virtual const Foo* Test( void ) const {
return NULL;
}
};
template< class T >
class B : A {
public:
B( void ) {
}
const T Test( void ) const {
return NULL;
}
};
int main( void ) {
A a;
B< Foo* > b;
} |
Zowel onder GCC als onder MSVC krijg ik vergelijkbare foutmeldingen, dus wellicht is het geen compiler bug o.i.d. maar een fundamentele C++ fout.
Overigens, als ik
code:
1
2
3
4
5
| const T Test( void ) const {
.
.
.
B< Foo* > b; |
vervang door:
code:
1
2
3
4
5
| T Test( void ) const {
.
.
.
B< const Foo* > b; |
compileert de code zonder problemen.
Iemand enig idee wat hier aan de hand is?
[ Voor 11% gewijzigd door Verwijderd op 28-04-2005 15:22 ]