Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 28, 2006 Newbie question | ||||
---|---|---|---|---|
| ||||
Hi, trying to get D into my brain but somehow I'm not in sync yet... This works (from the docs): struct Foo { public: int data() { return m_data; } // read property int data(int value) { return m_data = value; } // write property private: int m_data; } void main() { Foo f; f.data = 3; // same as f.data(3); printf ("%d", f.data + 3); // same as return f.data() + 3; } This doesn't: class Foo { public: int data() { return m_data; } // read property int data(int value) { return m_data = value; } // write property private: int m_data; } void main() { Foo f; f.data = 3; // same as f.data(3); printf ("%d", f.data + 3); // same as return f.data() + 3; } Thanks for any help Dune BTW: Maybe I will bother you guys/gals even more... depending on my grasping skills ;) |
November 28, 2006 Re: Newbie question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dune | Dune wrote: <snip> > This doesn't: > > class Foo { > public: > int data() { return m_data; } // read property > int data(int value) { return m_data = value; } // write property > > private: > int m_data; > } > > void main() { > Foo f; > f.data = 3; // same as f.data(3); <snip> Welcome to D. Classes in D have reference semantics. That is, by declaring a Foo, you are declaring not an object, but a reference to one. Initially, any reference is null, i.e. it doesn't refer to anything. Before you can do anything with it, you must make it refer to an object. f = new Foo; This creates a new object of type Foo, and makes f refer to it. Once that's done, then you can do stuff with it. Stewart. -- -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/M d- s:-@ C++@ a->--- UB@ P+ L E@ W++@ N+++ o K-@ w++@ O? M V? PS- PE- Y? PGP- t- 5? X? R b DI? D G e++++ h-- r-- !y ------END GEEK CODE BLOCK------ My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit. |
November 28, 2006 Re: Newbie question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stewart Gordon | Duh! While reading your post it was obvious that I forgot the essential stuff. Thanks. Dune |
November 28, 2006 Re: Newbie question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dune | Hi Dune, You needed the following line change "Foo f = new Foo;" since a class is an object, you needed to create it first before you using it. class Foo { public: int data() { return m_data; } // read property int data(int value) { return m_data = value; } // write property private: int m_data; } void main() { Foo f = new Foo; f.data = 3; // same as f.data(3); printf ("%d", f.data + 3); // same as return f.data() + 3; } David L |
Copyright © 1999-2021 by the D Language Foundation