Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Can't access class members from function

Reply
Thread Tools

Can't access class members from function

 
 
Stuart P
Guest
Posts: n/a
 
      07-01-2003
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


 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      07-01-2003
"Stuart P" <(E-Mail Removed)> 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


 
Reply With Quote
 
 
 
 
Kurt Krueckeberg
Guest
Posts: n/a
 
      07-01-2003
>
> 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


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
class members vs instance members hdixon Python 3 07-09-2006 06:56 PM
Can a sub-class (composite object) member function access private or protected members of base class? pkpatil@gmail.com C++ 2 06-09-2006 03:09 PM
Difference between static final members and final static members(if any)? JFCM Java 4 02-07-2006 11:32 AM
Templates: Members Vs. non-members Dave C++ 3 08-10-2004 11:23 AM
Can nested class members access private members of nesting class? CoolPint C++ 8 12-14-2003 02:30 PM



Advertisments