我有一个非常严厉的课程。
unit StuffClass;
{$mode objfpc}{$H+}
interface
type
TStuffClass = class
public
procedure Update;
end;
implementation
procedure TStuffClass.Update;
begin
end;
end.
创建它的实例,并调用其Update
过程会导致程序转换为SIGSEGV ..
什么......?它什么都没做。
我正在使用Freepascal(& Lazarus)32位版本。
为什么会这样做?
编辑:这是调用位:
//Creating it
constructor TEngine.Create(TV: pSDL_Surface);
begin
Self.TV := TV;
Self.StuffClass.Create;
end;
function TEngine.Update: Boolean;
begin
WriteLN('Test');
SDL_PumpEvents;
Self.StuffClass.Update; //Crashes here.
Update := True;
end;
答案 0 :(得分:1)
你错了。
您需要将返回的对象实例存储到变量中,然后使用该变量(引用):
constructor TEngine.Create(TV: pSDL_Surface);
begin
Self.TV := TV;
Self.StuffClass := TStuffClass.Create;
end;
现在,您的其余代码可以使用它:
procedure TEngine.SomeOtherProcedure;
begin
Self.StuffClass.Update;
end;