Ik ben momenteel bezig met wat oude c++ projecten weer wat nieuw leven in blazen. Het grootste obstakel is dat de meeste compilers behoorlijk wat stricter zijn geworden.
De code ( beetje simplified weer gegeven vanwege de spaghetti vormen van de originele code):
De error:
(icc 9.1) error #1556: conversion from inaccessible base class "Derived1" is not allowed
Derived2 * d2 = static_cast<Derived2*>(d1);
(gcc) error: ‘Derived1’ is an inaccessible base of ‘Derived2’
VC2005/icc 9.0 klaagden er niet over.
Ik ben geen C++ guru en gegeven het feit dat ik deze code niet heb geschreven vraag ik mij af wat ik nou het beste kan doen om het werkend te krijgen. Als ik Derived2 protected of public inherit van Derived1 dan werkt (als in geen compiler errors) weer wel. Maar "klopt" het idee achter de code dan nog wel?
De code ( beetje simplified weer gegeven vanwege de spaghetti vormen van de originele code):
C++:
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
38
39
40
41
42
| class Derived1; class Base { Base(const Base &); Base & operator=(const Base &); protected: Base() {} ~Base() {} Derived1 * next; void test(); friend class Derived1; }; class Derived1 : public Base { Derived1(const Derived1 &); Derived1 & operator=(const Derived1 &); protected: Derived1() {} ~Derived1() {} friend class Base; }; class OtherBase { public: void call_me() {} }; class Derived2 : public OtherBase, private Derived1 { public: Derived2() {} ~Derived2() {} }; void Base::test() { /*dit neemt aan dat er altijd Derived2 type objecten worden opgeslagen in next */ Derived1 * d1 = next; Derived2 * d2 = static_cast<Derived2*>(d1); d2->call_me(); } |
De error:
(icc 9.1) error #1556: conversion from inaccessible base class "Derived1" is not allowed
Derived2 * d2 = static_cast<Derived2*>(d1);
(gcc) error: ‘Derived1’ is an inaccessible base of ‘Derived2’
VC2005/icc 9.0 klaagden er niet over.
Ik ben geen C++ guru en gegeven het feit dat ik deze code niet heb geschreven vraag ik mij af wat ik nou het beste kan doen om het werkend te krijgen. Als ik Derived2 protected of public inherit van Derived1 dan werkt (als in geen compiler errors) weer wel. Maar "klopt" het idee achter de code dan nog wel?
[ Voor 0% gewijzigd door Verwijderd op 27-09-2006 22:03 . Reden: oops... protected werkt niet nee... ]