Can't access class members from function

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Stuart P

    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(fil ename) 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(IDirectDra wSurface7** target, IDirectDrawSurf ace7** tset);
    };

    and here is the function from level.cpp:

    level::load(LPC TSTR fname) {
    char temp[]="";
    BYTE temp2;
    std::ifstream lvlfile(fname, std::ios::in | std::ios::binar y);

    // irrelevant stuff went here

    temp2=(BYTE)lvl file.get();
    tsetfile=new char[temp2+1]; // crash occurs here
    lvlfile.get(tse tfile,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

    #2
    Re: Can't access class members from function

    "Stuart P" <stuartp@gvec.r emovethis.net> wrote...[color=blue]
    > I am making my first real game in C++ and there is a problem with the[/color]
    class[color=blue]
    > used to contain a level. The level::load(fil ename) function gives an[/color]
    Access[color=blue]
    > Violation error when trying to access the class's member variables. Here[/color]
    is[color=blue]
    > the class definition in level.h:
    >
    > class level {
    > BYTE w,h;
    > WORD *boarddata;
    > LPTSTR tsetfile;[/color]

    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;
    [color=blue]
    >
    > public:
    > void load(LPCTSTR file);
    > void draw(IDirectDra wSurface7** target, IDirectDrawSurf ace7** tset);
    > };
    >
    > and here is the function from level.cpp:
    >
    > level::load(LPC TSTR fname) {
    > char temp[]="";[/color]

    How should this one-char array help you?
    [color=blue]
    > BYTE temp2;[/color]

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

    unsigned char temp2;
    [color=blue]
    > std::ifstream lvlfile(fname, std::ios::in | std::ios::binar y);
    >
    > // irrelevant stuff went here
    >
    > temp2=(BYTE)lvl file.get();[/color]

    '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'...
    [color=blue]
    > tsetfile=new char[temp2+1]; // crash occurs here[/color]

    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?
    [color=blue]
    > lvlfile.get(tse tfile,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.[/color]

    No. If you can't access the member variables, the compiler would
    complain. If it compiles OK, access is not the cause.
    [color=blue]
    >
    > I think I might need to initialize something somehow first but I'm not[/color]
    sure[color=blue]
    > how...[/color]

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

    Victor


    Comment

    • Kurt Krueckeberg

      #3
      Re: Can't access class members from function

      >[color=blue]
      > I am making my first real game in C++ and there is a problem with the[/color]
      class[color=blue]
      > used to contain a level. The level::load(fil ename) function gives an[/color]
      Access[color=blue]
      > Violation error when trying to access the class's member variables. Here[/color]
      is[color=blue]
      > the class definition in level.h:
      >
      > class level {
      > BYTE w,h;
      > WORD *boarddata;
      > LPTSTR tsetfile;
      >
      > public:
      > void load(LPCTSTR file);
      > void draw(IDirectDra wSurface7** target, IDirectDrawSurf ace7** tset);
      > };
      >
      > and here is the function from level.cpp:
      >
      > level::load(LPC TSTR fname) {
      > char temp[]="";
      > BYTE temp2;
      > std::ifstream lvlfile(fname, std::ios::in | std::ios::binar y);
      >
      > // irrelevant stuff went here
      >
      > temp2=(BYTE)lvl file.get();
      > tsetfile=new char[temp2+1]; // crash occurs here
      > lvlfile.get(tse tfile,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
      >
      > }
      >[/color]
      Since tsetfile is of type LPTSTR, do
      tsetfile = new TCHAR[temp2+1];
      tsetfile[temp2] = _T('\0'); // terminate the string


      Comment

      Working...