Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C++ (http://www.velocityreviews.com/forums/f39-c.html)
-   -   Can't access class members from function (http://www.velocityreviews.com/forums/t267937-cant-access-class-members-from-function.html)

Stuart P 07-01-2003 06:13 PM

Can't access class members from function
 
Hello,

I am making my first real game in C++ and there is a problem with the class
used to contain a level. The level::load(filename) function gives an Access
Violation error when trying to access the class's member variables. Here is
the class definition in level.h:

class level {
BYTE w,h;
WORD *boarddata;
LPTSTR tsetfile;

public:
void load(LPCTSTR file);
void draw(IDirectDrawSurface7** target, IDirectDrawSurface7** tset);
};

and here is the function from level.cpp:

level::load(LPCTSTR fname) {
char temp[]="";
BYTE temp2;
std::ifstream lvlfile(fname, std::ios::in | std::ios::binary);

// irrelevant stuff went here

temp2=(BYTE)lvlfile.get();
tsetfile=new char[temp2+1]; // crash occurs here
lvlfile.get(tsetfile,temp2+1);
w=(BYTE)lvlfile.get(); // or here if above is commented
h=(BYTE)lvlfile.get(); // or here if above is commented
boarddata=new WORD[w*h];


// irrelevant stuff went here

}

I have tried using new char[10] and such but I am pretty sure the crash is
caused because it can't access the member variables.

I think I might need to initialize something somehow first but I'm not sure
how...
Any help would be greatly appreciated!

- Stuart



Victor Bazarov 07-01-2003 06:22 PM

Re: Can't access class members from function
 
"Stuart P" <stuartp@gvec.removethis.net> wrote...
> I am making my first real game in C++ and there is a problem with the

class
> used to contain a level. The level::load(filename) function gives an

Access
> Violation error when trying to access the class's member variables. Here

is
> the class definition in level.h:
>
> class level {
> BYTE w,h;
> WORD *boarddata;
> LPTSTR tsetfile;


This is really not what you want to post here. MS-specific type
nonsense should better be limited to MS-specific newsgroups.
Besides, if you use real C++ types, you're probably going to see
much clearer into what you're trying to do.

So, let's say you have

unsigned char w, h;
unsigned short *boarddata;
char *tsetfile;

>
> public:
> void load(LPCTSTR file);
> void draw(IDirectDrawSurface7** target, IDirectDrawSurface7** tset);
> };
>
> and here is the function from level.cpp:
>
> level::load(LPCTSTR fname) {
> char temp[]="";


How should this one-char array help you?

> BYTE temp2;


Again, let's use normal C++ types:

unsigned char temp2;

> std::ifstream lvlfile(fname, std::ios::in | std::ios::binary);
>
> // irrelevant stuff went here
>
> temp2=(BYTE)lvlfile.get();


'get' returns 'int_type'. Converting it to unsigned char is,
most likely, not what you want. So, you may be better off with
'temp2' declared as 'int'...

> tsetfile=new char[temp2+1]; // crash occurs here


There is nothing on that line to suggest the reason for it to
crash, _unless_ 'temp2' has the value < -1. Have you tried to
check what value your 'temp2' has here?

> lvlfile.get(tsetfile,temp2+1);
> w=(BYTE)lvlfile.get(); // or here if above is commented
> h=(BYTE)lvlfile.get(); // or here if above is commented
> boarddata=new WORD[w*h];
>
>
> // irrelevant stuff went here
>
> }
>
> I have tried using new char[10] and such but I am pretty sure the crash is
> caused because it can't access the member variables.


No. If you can't access the member variables, the compiler would
complain. If it compiles OK, access is not the cause.

>
> I think I might need to initialize something somehow first but I'm not

sure
> how...


It is possible that the error is somewhere in "irrelevant stuff"
as you labelled it.

Victor



Kurt Krueckeberg 07-01-2003 06:25 PM

Re: Can't access class members from function
 
>
> I am making my first real game in C++ and there is a problem with the

class
> used to contain a level. The level::load(filename) function gives an

Access
> Violation error when trying to access the class's member variables. Here

is
> the class definition in level.h:
>
> class level {
> BYTE w,h;
> WORD *boarddata;
> LPTSTR tsetfile;
>
> public:
> void load(LPCTSTR file);
> void draw(IDirectDrawSurface7** target, IDirectDrawSurface7** tset);
> };
>
> and here is the function from level.cpp:
>
> level::load(LPCTSTR fname) {
> char temp[]="";
> BYTE temp2;
> std::ifstream lvlfile(fname, std::ios::in | std::ios::binary);
>
> // irrelevant stuff went here
>
> temp2=(BYTE)lvlfile.get();
> tsetfile=new char[temp2+1]; // crash occurs here
> lvlfile.get(tsetfile,temp2+1);
> w=(BYTE)lvlfile.get(); // or here if above is commented
> h=(BYTE)lvlfile.get(); // or here if above is commented
> boarddata=new WORD[w*h];
>
>
> // irrelevant stuff went here
>
> }
>

Since tsetfile is of type LPTSTR, do
tsetfile = new TCHAR[temp2+1];
tsetfile[temp2] = _T('\0'); // terminate the string




All times are GMT. The time now is 10:49 AM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.