Hvordan fixer man en compiler error: C2385: 'Open1::delete'
Hej med jer! Jeg programmerer i Microsoft Visual C++ 6.0. Jeg er ved at lave en CPropertySheet, som blandt andet indeholder en CPropertyPage med CFiledialog som base class. Jeg har selvfølgeligt oprettet en class som hedder: class Open1 : public CFileDialog, public CPropertyPage. Når jeg nu compiler programmet, får jeg en error C2385: 'Open1::delete' is ambiguous, som peger på constructoren i Open1::Open1() Dette skyldes at compileren ikke kan vide hvilken af de to base class, som den skal delete; men spørgsmålet er så hvad jeg kan gøre ved det! Med venlig hilsen Tomas Rasmussen tomasr@mail.sonofon.dk
Hej med jer! Jeg har lige snakket med Paul Dilascia (VC++ Guru), og han siger at man ikke kan lave en CPropertyPage med en custom CFileDialog som base class. Det man kan gøre istedet for er at lave sin helt egen CFileDialog class, og så gøre den til en CPropertyPage. Dette skyldes at MFC ikke understøtter "multiple inheritance". Jeg har prøvet at gøre det som greybeard foreslår, men det virker ikke, for compileren siger at man er nød til at gøre "delete" til en global. Her har i en forsimplet udgave af den dialog som jeg snakker om:
Hrm. Jeg forstår nu hvad du mener, men compileren kommer med en fejl: error C2834: 'operator delete' must be globally qualified. Hvad skal jeg gøre for at løse dette???
2) Hvis du skal delete noget, skal du som minimum pege på det som skal delete's - dvs. normalt member-variabler. Hvis det er fordi du vil nedlægge base klassen, så skal du kalde base-klassens destructor (brug 'this' til at fortælle at det er den aktuelle instans der skal nedlægges):
class c1 { public: char *a = NULL; c1(char *s) { a = new char(strlen(s)); strcpy(a, s); }; ~c1() { if (a != NULL) delete[] a; }; } class c2 : c1 { public: int x; c2(int s) ( x = s; }; ~c2() { this::~c1(); } }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.