954,529 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Delphi Onjects

Hi I have a delphi object to store some music information (note, start time, duratrion...) problem is I always get memory addressing error when I run the code,can someone please tell me where I'm going wrong!

I declare it in a seperate unit, with all my other declerations as follows:

type
SongClass = class
public
//Properties of SongClass

title : String; // Song title for user reference
tempo : integer; //tempo of the song
top : integer;
track : array[1..max_notes] of rNote; //musical data that is the song.

//Methods of SongClass
procedure addNote(inNote : rNote);
procedure sortSong;
constructor create;


end;

When it crashes it ends up with an acces violation.

It wont let me assign a value to any of the properties. I dont want it complicated, I know its kinda simple but it has to be!

I declare the variable just after the decleration of the class, its literally the next line of code:


var
song : songClass;


And when in the other forms I can see song as a variable with all the methods and properties I have made.


I have filled out the methods in rough but none of them do anything and it crashes before they can run anyway.

I do this to set up the object, even tho the constructor is empty:

procedure TForm1.FormCreate(Sender: TObject);
begin
song := song.create;
end;


If i put anything in the constructor, like top :=0; then it crashes there with the access violation!


Have i missed anything really simple out???


Thanks for any help anyone can give me! Its driving me mad!


JOsh :lol:

mr_mooz
Newbie Poster
11 posts since Oct 2004
Reputation Points: 10
Solved Threads: 0
 

try song:= new song.create;

jwenting
duckman
Team Colleague
8,392 posts since Nov 2004
Reputation Points: 1,662
Solved Threads: 337
 

I tried that and it still wont work! thanks any way!


Ive tried compiling it in delphi 8 as in 6 it didnt give any error msg. Now it says an inherited constructor must be called. but i dont use inheritance! i would if i was doing a component but i thought this should be a stand alone class, in it own right.


Is there some default thing i can inherit from prehaps????

mr_mooz
Newbie Poster
11 posts since Oct 2004
Reputation Points: 10
Solved Threads: 0
 

what does your constructor look like?
In it you should call the superclass constructor if I'm not mistaken (been a while since I've used Delphi...).
Every class you create inherits from TObject if memory serves...

If you don't want a dynamic object, don't call create. Create creates a new object of the class on the heap.

jwenting
duckman
Team Colleague
8,392 posts since Nov 2004
Reputation Points: 1,662
Solved Threads: 337
 

I found out what i did wrong.


I needed to do a line

inherit Create;

and when i called the constructor it should of been

song := songClass.Create;

Hope that helps someone if they ever get stuck with this!
Thanks for you help guys!


And sorry, I did mean object, not onjects. They're something completely different....

mr_mooz
Newbie Poster
11 posts since Oct 2004
Reputation Points: 10
Solved Threads: 0
 

The only problem was that you used

song := song.Create; and the right way is song := songClass.Create;

You don't have to write the inherit create.

If you want to do some special things in constructor then you MUST write something like this

type
  SongClass = class(TObject)
    private
      //Properties of SongClass

    public
      //Methods of SongClass
      constructor Create; override;

    end;

implementation


constructor SongClass.Create;
begin
  inherited Create;
  //any initialization or whatever you want
end;

end.


I hope that will be helpful

badMF
Newbie Poster
3 posts since Aug 2007
Reputation Points: 10
Solved Threads: 0
 

i believe that from Oct 2004 he learned that.

anyway the intention is good.

best regards,

radu84
Junior Poster
171 posts since Dec 2006
Reputation Points: 14
Solved Threads: 16
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You