Ver Mensaje Individual
  #1  
Antiguo 06-06-2008
ivanloco ivanloco is offline
Miembro
 
Registrado: abr 2006
Posts: 30
Reputación: 0
ivanloco Va por buen camino
Problemas con la creacion de clases

El problema es el siguiente: tengo dos unidades, una llamada Cubos donde defino una clase "Cubo" y otra unidad llamada Fichas donde defino una clase "Ficha" la cual utiliza instancias de la clase Cubo. Todo compila bien pero en tiempo de ejecución al correr la sentencia Ficha.Create se produce el siguiente error en la primer línea del método constructor:
"Project Trabajo.exe raised exception class EAccessViolation with message 'Access violation at address 004505C6 in module 'Trabajo.exe'. Write of address 00000004'. Process stopped. Use Step or Run to continue."

Unidad Cubos:

Código:
Unit Cubos;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,Forms,
  Dialogs, StdCtrls;

type Cubo = class
  public
  r: integer;
  g: integer;
  b: integer;
  despX: integer;
  despY: integer;
  triangulos: array [1..24] of triangulo;
  constructor Create;
  procedure setColor(rp:integer;gp:integer;bp:integer);
  procedure setDesp(desX: integer;desY: integer);
end;

constructor Cubo.Create;
begin
  r:=255;
  g:=255;
  b:=255;
  despX:= 0;
  despY:= 0;
end;
Unidad Fichas:

Código:
unit Fichas;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Cubos;


type Ficha = class
 public
 cubos: array[1..4] of Cubo;
 desplaX: integer;
 desplaY: integer;
 constructor create;
end;

implementation

constructor Ficha.create;
begin
  cubos[1] := Cubo.Create; (en esta linea se produce el error)
  cubos[2] := Cubo.Create;
  cubos[3] := Cubo.Create;
  cubos[4] := Cubo.Create;
  cubos[1].setDesp(50,0);
  cubos[2].setDesp(0,50);
  cubos[3].setDesp(50,50);
  cubos[4].setDesp(100,50);
end;
Alguien sabe por que? Gracias