Char Incrementing Problem

Started by
5 comments, last by Chryzmo 20 years, 3 months ago
Heyas, I am putting together a text based adventure game. I am having this problem with loading my levels. I keep the file name in a variable, it was a char until I realized once the player gets to the final level of the 9th file (map9.txt) and the file name variable gets incremented to 10, the char doesn't work anymore.

I have the game put together the file name by doing this:

string mapName;
char levelNumber;

mapName = "map";
mapName += levelNumber;
mapName += ".txt";
I also tried making the levelNumber variable an int, but when I run the program the mapName ends up looking something like this: map .txt (edit: there should be 5 spaces here, even though my post only shows one) Is there someway to append an int to a string? Or maybe someone could suggest another way to go about solving this problem? Thanks, Chris [edited by - Chryzmo on January 6, 2004 7:59:27 PM]
Advertisement
A char only has room for a single character. "10" consists of two characters.

The simple solution to that would be to to expand support for two level number characters, or to just use a string instead.
Disclaimer: "I am in no way qualified to present advice on any topic concerning anything and can not be held responsible for any damages that my advice may incurr (due to neither my negligence nor yours)"
There''s a class called stringstream that does just what you want. Here''s a quick example for you.

#include <iostream>#include <sstream>                                                                                                    using namespace std;                                                                                                    int main ( int argc, char *argv[] ) {        int level_num = 10;        stringstream map_name;                                                                                                            map_name << "map" << level_num << ".txt";                                                                                                            cout << map_name.str() << endl;}


That should print out "map10.txt"

Hope that helps,

Tony
Thanks a lot, that was perfect.

Now, I have another question, this time regarding classes. I want to seperate my map functions from the rest of my code, and put them in their own class. However, there are a few functions in my CGame class that I need to call a public function in my new CMap class. Is there someway to do this in the function declarations?

// Here is an example:    if (cBoard[mYPOS][mXPOS] == ''U'')    {        iCurrentLevel++;        if (iCurrentLevel == 10)        {            CMap.LoadFile();            iCurrentLevel = 0;            CMap.LoadMap(iCurrentLevel);        } else {            CMap.LoadMap(iCurrentLevel);        }    }// LoadFile() and LoadMap(int level) are public functions in my new CMap class.


I get the following error:

TAGFunctions.cpp: In member function `void CGame::GetInput()'':

TAGFunctions.cpp:90: parse error before `.'' token
TAGFunctions.cpp:92: parse error before `.'' token
TAGFunctions.cpp:94: parse error before `.'' token

Thanks,
Chris
Are you seperating your code into .h and .cpp files? If so, then at the beginning of the file CGame.cpp, make sure to #include "CMap.h"

If you aren''t seperating your code into .h and .cpp, then umm, start doing that.
Or do you have a variable named CMap? Or is that your class name? To me it sounds like the class name and if so, you cannot do that.

CMap myMap;// Here is an example:    if (cBoard[mYPOS][mXPOS] == ''U'')    {        iCurrentLevel++;        if (iCurrentLevel == 10)        {            myMap.LoadFile();            iCurrentLevel = 0;            myMap.LoadMap(iCurrentLevel);        } else {            myMap.LoadMap(iCurrentLevel);        }    }// LoadFile() and LoadMap(int level) are public functions in my new CMap class.
Hmm... that is what I thought. However, I called: CMap map
from my main loop, but it still gives me this error when I change the function calls.

Error:

TAGFunctions.cpp: In member function `void CGame::GetInput()'':

TAGFunctions.cpp:90: `map'' undeclared (first use this function)
TAGFunctions.cpp:90: (Each undeclared identifier is reported only once for each
function it appears in.)

int main(){CGame game;CMap map;   // other stuff   return 0;}// New function calls// This is within the definition of one of my functionsCGame::GetInput(){//...    if (cBoard[mYPOS][mXPOS] == ''U'')    {        iCurrentLevel++;        if (iCurrentLevel == 10)        {            map.LoadFile();            iCurrentLevel = 0;            map.LoadMap(iCurrentLevel);        } else {            map.LoadMap(iCurrentLevel);        }    }//...}


I believe the problem is because this is in the definition of CGame::GetInput(), so I''m not even sure I can call a function from a differnt class. However, I would think there is some way to do it, right?

Thanks,
Chris

This topic is closed to new replies.

Advertisement