Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C++] Suggerimenti su codice
Forum - C/C++ - [C++] Suggerimenti su codice

Avatar
Pippo_94 (Normal User)
Rookie


Messaggi: 32
Iscritto: 18/05/2009

Segnala al moderatore
Postato alle 14:26
Giovedì, 20/08/2009
Salve a tutti, oggi ho provato a riscrivere il famoso Hello World utilizzando il paradigma OOP. Questo è il mio codice:

Codice sorgente - presumibilmente C#

  1. #include<iostream>
  2. #include<string>
  3.  
  4. using namespace std;
  5.  
  6. using std :: cout;
  7.  
  8. class Ciao
  9. {
  10.     string saluto;
  11.  
  12.     public: string mostra()
  13.     {
  14.         return "Ciao, mondo!";
  15.     }
  16.  
  17. }
  18.  
  19. int main()
  20. {
  21.     Ciao hello;
  22.  
  23.     cout << hello.mostra << endl;
  24.  
  25.     system("pause");
  26.  
  27.     return 0;
  28. }



Siccome provando a compilarlo (per chi volesse saperlo uso Code::Blocks) mi vengono fuori diversi errori, volevo un piccolo suggerimento su dove posso aver sbagliato il codice e quindi su come potrei riscriverlo. Grazie!!!

P.s.: gli errori che mi da sono i seguenti:

Codice sorgente - presumibilmente VB.NET

  1. Q:\C++\CiaoOOP.cpp|20|error: new types may not be defined in a return type|
  2. Q:\C++\CiaoOOP.cpp|20|note: (perhaps a semicolon is missing after the definition of `Ciao')|
  3. Q:\C++\CiaoOOP.cpp|20|error: extraneous `int' ignored|
  4. Q:\C++\CiaoOOP.cpp|20|error: `main' must return `int'|
  5. Q:\C++\CiaoOOP.cpp||In function `int main(...)':|
  6. Q:\C++\CiaoOOP.cpp|23|error: no match for 'operator<<' in 'std::cout << hello.Ciao::mostra'|
  7. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|63|note: candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>&(*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]|
  8. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|74|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]|
  9. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|86|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base&(*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]|
  10. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|121|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]|
  11. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|155|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]|
  12. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|98|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]|
  13. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\ostream|178|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]|
  14. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\ostream|189|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]|
  15. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\ostream|193|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]|
  16. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\ostream|204|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]|
  17. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|179|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>]|
  18. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|214|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]|
  19. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|238|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>]|
  20. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\ostream|219|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>]|
  21. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|261|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]|
  22. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|284|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>]|
  23. C:\Programmi\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\include\c++\3.4.5\bits\ostream.tcc|307|note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]|
  24. ||=== Build finished: 4 errors, 0 warnings ===|


Ultima modifica effettuata da Pippo_94 il 20/08/2009 alle 14:28


- La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)

- Non ho paura dei computer, ma della loro eventuale mancanza. (Isaac Asimov)
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 14:44
Giovedì, 20/08/2009
Testo quotato

Postato originariamente da Pippo_94:
Codice sorgente - presumibilmente C#

  1. #include<iostream>
  2. #include<string>
  3.  
  4. using namespace std;
  5.  
  6. using std :: cout;
  7.  
  8. class Ciao
  9. {
  10.     string saluto;
  11.  
  12.     public: string mostra()
  13.     {
  14.         return "Ciao, mondo!";
  15.     }
  16.  
  17. }
  18.  
  19. int main()
  20. {
  21.     Ciao hello;
  22.  
  23.     cout << hello.mostra << endl;
  24.  
  25.     system("pause");
  26.  
  27.     return 0;
  28. }





Togli
using std :: cout;
metti un ; alla chiusura della classe ciao:

Codice sorgente - presumibilmente C#

  1. class Ciao
  2. {
  3.     string saluto;
  4.  
  5.     public: string mostra()
  6.     {
  7.         return "Ciao, mondo!";
  8.     }
  9.  
  10. };


e metti le () in dopo mostra:
cout << hello.mostra() << endl;


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
PM Quote
Avatar
Pippo_94 (Normal User)
Rookie


Messaggi: 32
Iscritto: 18/05/2009

Segnala al moderatore
Postato alle 14:49
Giovedì, 20/08/2009
Grazie mille! Mi hai salvato...oramai non sapevo più dove sbattere la testa ^^


- La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta. (Isaac Asimov)

- Non ho paura dei computer, ma della loro eventuale mancanza. (Isaac Asimov)
PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 14:51
Giovedì, 20/08/2009
Di niente, comunque ricorda sempre i ; alla fine delle classi, è un errore molto comune.


"E' facile distruggere, la vera sfida è creare!"(cit. me)

"Ricordati chi sei, non permettere a nessuno di cambiarti, non perdere mai te stesso. Farai grandi cose nella vita."(cit. me)

double penetration; //ouch
PM Quote
Avatar
giupeppe (Normal User)
Newbie


Messaggi: 11
Iscritto: 26/08/2009

Segnala al moderatore
Postato alle 1:19
Mercoledì, 26/08/2009
Eh già...se metti using namespace std; non serve mettere il cout perchè è tutto incluso nel namespace.

Nella classe prendi l'abitudine di scrivere anche lo specificatore d'accesso private:
e quando apri la graffa prendi l'abitudine di chiuderla subito dopo e metti i due punti. ({    };)...e poi scrivi le funzioni e dati membro all interno.

Ogni volta che chiami una funzione devi mettere le parentesi anche se la funzione non contiene parametri...puoi scrivere void o lasciare in bianco...così: mostra() o così: mostra(void).


PM Quote