Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Vorrei provare a usare la classe già presente di base nel C++ estendendola per crearne una mia myString aggiungendo alcune funzioni di base e facendo l'overloading di alcuni metodi per semplificarmi la vita in alcuni progetti.
Ho provato a fare questo:
Codice sorgente - presumibilmente C/C++
#include<string>
using std::string;
class myString : public string{};
Cercando di far ereditare alla mia classe quella di string.
NetBeans mi fa richiamare i metodi e gli operatori nel main di prova che ho creato per controllare se davvero ereditava quindi li vede e ci sono.
Codice sorgente - presumibilmente C/C++
int main(int argc, char** argv) {
myString str;
string helloWorld = "Hello world";
str = helloWorld.c_str();
cout << str << endl;
return (EXIT_SUCCESS);
}
In compilazione invece mi da questo errore:
g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/main.o.d -o build/Debug/GNU-Linux-x86/main.o main.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:19: error: no match for ‘operator=’ in ‘str = helloWorld’
myString.h:14: note: candidates are: myString& myString::operator=(const myString&)
Qualche idea su cosa sia che non va?
Ultima modifica effettuata da BugliL il 15/07/2010 alle 12:32
Era proprio per evitare di dover ridefinire ogni metodo e ogni operatore che volevo ereditare da string. I metodi cmq riesce a vederli..... qualcuno ne sa il motivo?
" Your operator== here _hides_ the base's one. It does not override it because it has a different argument type."
Qui dice che l'operatore non viene sovrascritto ma solo nascosto visto che viene ridefinito. Ma nel mio codice ho provato anche a toglierlo proprio l'overloading ma non fa lo stesso.
Il problema riguarda solo l'assegnazione perchè << funziona come operatore.
" Your operator== here _hides_ the base's one. It does not override it because it has a different argument type."
Qui dice che l'operatore non viene sovrascritto ma solo nascosto visto che viene ridefinito. Ma nel mio codice ho provato anche a toglierlo proprio l'overloading ma non fa lo stesso.
Il problema riguarda solo l'assegnazione perchè << funziona come operatore.
non devi toglierlo, devi usare il dynamic cast come suggerito
Si l'avevo copiato quello, è che volevo capire sopratutto il perchè anche quando non cerco di fare overloading non riesce a vedermi il vecchio operatore.
Per usarlo ho risolto. Grazie della dritta
Ultima modifica effettuata da BugliL il 17/07/2010 alle 0:10