www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - newbie: Access violation because of "class"

reply "Larry Luther" <larry.luther dolby.com> writes:
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;
}
Apr 29 2010
next sibling parent Ellery Newcomer <ellery-newcomer utulsa.edu> writes:
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.
Apr 29 2010
prev sibling next sibling parent bearophile <bearophileHUGS lycos.com> writes:
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
Apr 30 2010
prev sibling parent "Larry Luther" <larry.luther dolby.com> writes:
Thanks for your help. 
Apr 30 2010