Thread overview
newbie: Access violation because of "class"
Apr 30, 2010
Larry Luther
Apr 30, 2010
Ellery Newcomer
Apr 30, 2010
bearophile
Apr 30, 2010
Larry Luther
April 30, 2010
Why do I get an "object.Error: Access Violation" in the following code? If I change "class" to "struct" and remove "public:" I don't get an error. I'm using D2.

import std.stdio;

class Plane {
  public:
    int
      xres,
      yres;
};


void main (string[] args) {
 Plane
  p;
  p.xres = 1920;
}





April 30, 2010
On 04/29/2010 08:50 PM, Larry Luther wrote:
> Why do I get an "object.Error: Access Violation" in the following code?
> If I change "class" to "struct" and remove "public:" I don't get an error.
> I'm using D2.
>
> import std.stdio;
>
> class Plane {
>    public:
>      int
>        xres,
>        yres;
> };
>
>
> void main (string[] args) {
>   Plane
>    p;
>    p.xres = 1920;
> }
>
>
>
>
>

because 'Plane p;' is short for 'Plane p = null;'

I bet you want 'Plane p = new Plane();'

or if you want it allocated on the stack, I think

'scope Plane p = new Plane();'

should work.
April 30, 2010
Larry Luther:

> Why do I get an "object.Error: Access Violation" in the following code? If I change "class" to "struct" and remove "public:" I don't get an error. I'm using D2.

D classes are not like C++ classes, they are managed by reference only, as in Java. See the scope keyword too.

Bye,
bearophile
April 30, 2010
Thanks for your help.