Forum: problem med retur värden och klasser

Forum huvudsida -> Programmering -> problem med retur värden och klasser

Sidor: 1

Till botten

Tesuki 16:03 - 17:e Juli 2006 | Post #1
Medlem
Inlägg: 122


Skicka PM
hej jag har skapat en klass i c++ som heter minTTFklass och den är till för att förenkla användandet av SDL_ttf hur som helst så ser koden ut så här:
minTTFklass.h

  1.  
  2. #ifndef MINTTFKLASS_H_
  3. #define MINTTFKLASS_H_
  4.  
  5. #include "GameEngine.h"
  6.  
  7. #include "SDL.h"
  8. #include "SDL_ttf.h"
  9.  
  10. #include <iostream>
  11. #include <fstream>
  12. #include <cstring>
  13.  
  14. class minTTFklass {
  15. public:
  16. void init(const char* file, int size);
  17. void cleanUp();
  18. void setPosition(int x, int y);
  19. void setForeColor(int R, int G, int B, int U);
  20. void setBackColor(int R, int G, int B, int U);
  21. void draw(GameEngine *game, const char* strText);
  22. private:
  23. SDL_Surface *m_TextScreen;
  24. TTF_Font *m_TextFont;
  25. SDL_Color m_fontForgroundColor;
  26. SDL_Color m_fontBackgroundColor;
  27. SDL_Rect m_rcPosition;
  28. }
  29. #endif

och så är det minTTFklass.cpp
  1.  
  2. #include "SDL.h"
  3. #include "SDL_ttf.h"
  4.  
  5. #include "minTTFklass.h"
  6.  
  7. #include <iostream>
  8. #include <fstream>
  9. #include <cstring>
  10.  
  11. void minTTFklass::init(const char* file, int size) {
  12. std::ofstream foutput;
  13. foutput.open("error.txt", std::ios_base::out | std::ios_base::app);
  14. if(TTF_Init() == -1) {
  15. foutput << "could not init ttf: " << TTF_GetError();
  16. SDL_Quit();
  17. return;
  18. }
  19. m_TextFont = TTF_OpenFont(file, size);
  20. if(m_TextFont == NULL) {
  21. foutput << "could not load font: " << TTF_GetError();
  22. SDL_Quit();
  23. return;
  24. }
  25. std::cout << "ZetaGTrueTypeFont initilized succesfully" << std::endl;
  26. return;
  27. }
  28.  
  29. void minTTFklass::cleanUp() {
  30. SDL_FreeSurface(m_TextScreen);
  31. }
  32.  
  33. void minTTFklass::setPosition(int x, int y) {
  34. m_rcPosition.x = x;
  35. m_rcPosition.y = y;
  36. return;
  37. }
  38. void minTTFklass::setForeColor(int R, int G, int B, int U) {
  39. m_fontForgroundColor.r = R;
  40. m_fontForgroundColor.g = G;
  41. m_fontForgroundColor.b = B;
  42. m_fontForgroundColor.unused = U;
  43. }
  44.  
  45. void minTTFklass::setBackColor(int R, int G, int B, int U) {
  46. m_fontBackgroundColor.r = R;
  47. m_fontBackgroundColor.g = G;
  48. m_fontBackgroundColor.b = B;
  49. m_fontBackgroundColor.unused = U;
  50. }
  51.  
  52. void minTTFklass::draw(ZetaGGameEngine *game, const char* strText) {
  53. m_TextScreen = TTF_RenderText_Shaded(m_TextFont, strText,
  54. m_fontForgroundColor, m_fontBackgroundColor);
  55. SDL_BlitSurface(m_TextScreen, NULL, game->screen, &m_rcPosition);
  56. }


och denna kod vägrar att compileras här är en error lista
  • line: 16 - new types may not be defined in a return type
  • line: 16 - two or more data types in declaration of 'init'
  • line: 16 - prototype for 'minTTFklass minTTFklass::init(const char*, int)' does not match any in class 'minTTFklass'
  • line: 16 - 'minTTFklass minTTFklass::init(const char*, int)' and 'void minTTFklass::init(const char*, int)' cannot be overloaded
In member function 'minTTFklass minTTFklass::init(const char*, int)':
  • line: 25 - return-statement with no value, in function returning 'minTTFklass'
  • line: 32 - return-statement with no value, in function returning 'minTTFklass'
  • line: 37 - return-statement with no value, in function returning 'minTTFklass'

fast lägger man ett semi kolon på rad 10 fungerar koden.
vilket jag undrar varför? har någon här någon aning?




Nissebosselasse 18:15 - 17:e Juli 2006 | Post #2
Medlem
Inlägg: 490


Skicka PM
Du måste avsluta klassen med ett semikolon:
  1.  
  2. class enKlass {
  3. } // Fel, inget avslutande semikolon

  1.  
  2. class enKlass {
  3. }; // Rätt, avslutar klassen

Eller rättare sagt, om du utelämnar semikolonet så förväntar kompilatorn ett variabelnamn där efter sista måsvingen. På så sätt kan du göra själva strukturen för klassen och samtidigt skapa en variabel som är en instans av klassen:
  1.  
  2. /*
  3. * Skapa klassen samt en instans av den i
  4. * variabeln 'Bil1'
  5. */
  6. class bilKlass{
  7. public:
  8. int antalHjul () { return 0; }
  9. } Bil1;

Om du tar bort alla preprocessordirektiv (#define, #include, etc), så ser du att din kod kommer att bli följande vid kompilering (kompilatorn sätter ju ihop all text):
  1.  
  2. class minTTFklass {
  3. public:
  4. void init(const char* file, int size);
  5. void cleanUp();
  6. void setPosition(int x, int y);
  7. void setForeColor(int R, int G, int B, int U);
  8. void setBackColor(int R, int G, int B, int U);
  9. void draw(GameEngine *game, const char* strText);
  10. private:
  11. SDL_Surface *m_TextScreen;
  12. TTF_Font *m_TextFont;
  13. SDL_Color m_fontForgroundColor;
  14. SDL_Color m_fontBackgroundColor;
  15. SDL_Rect m_rcPosition;
  16. } void minTTFklass::init(const char* file, int size) {
  17. std::ofstream foutput;
  18. foutput.open("error.txt", std::ios_base::out | std::ios_base::app);
  19.  
  20. if(TTF_Init() == -1) {
  21. foutput << "could not init ttf: " << TTF_GetError();
  22. SDL_Quit();
  23. return;
  24. }
  25.  
  26. m_TextFont = TTF_OpenFont(file, size);
  27. if(m_TextFont == NULL) {
  28. foutput << "could not load font: " << TTF_GetError();
  29. SDL_Quit();
  30. return;
  31. }
  32.  
  33. std::cout << "ZetaGTrueTypeFont initilized succesfully" << std::endl;
  34.  
  35. return;
  36. }

Ser du felet? init har fått två returtyper (dels void och dels minTTFklass), eftersom
semikolonet utelämnades vid klassdeklarationen.

En annan sak jag såg i klassen var metoden void draw(GameEngine *game, const char* strText);,
fast i dess .cpp-fil så var den den första parametern utbytt från GameEnginge till ZetaGGameEngine.
,,r det bara skrivfel?

Kom ihåg: om du får många kompileringsfel, så brukar det räcka med att lösa det som är överst i listan. Alla andra fel brukar uppkomma på grund av att det första felet finns, och därför tolkar kompilatorn resten av koden fel.

-------------------------
http://pushingcows.se
Gula Nallen



Tesuki 18:54 - 17:e Juli 2006 | Post #3
Medlem
Inlägg: 122


Skicka PM
danke danke

tack för hjälpen med det och tack för att jag fick en förklaring på hur det med att man kan skapa en istans av en klass direket efteråt.

ZetaGGameEngine och det där är för att jag är att jag byter namn på klasser genom skapandet lite då och då och glömer at döpa om alla...

åter igen tack.




Sidor: 1

Forum huvudsida -> Programmering -> problem med retur värden och klasser
Atom feed

Du får inte posta i den här tråden | Till toppen