Access Violation em Objeto instanciado.
Oi Amigos, estou com um erro que pra mim e mt estranho estou trabalhando com colletion e collectionItens.E o meu problema e o sequinte. Eu tenho um metodo Add com dois overloads sendo que eu chamo um metodo faço o que tenho que fazer e quando chamo o outro pra terminar o serviço ele da access violetion, e debugando quem esta nil e o proprio objeto ja que self esta igual a nil. Mas se ele náo estivese estanciado ele deveria ter dado erro ja na chamada dele. Vai ai um esqueleto do Codigo.
function TColecaoCampos.Add(Campo: TCampo): TCampo;
begin
result :=inherited Add as TCampo; //O erro Acontece aqui.
end;
function TColecaoCampos.Add(Campo1:String;Campo2:String): TCampo;
var
AddCampo:TCampo;
begin
AddCampo:=TCampo.Create();
AddCampo.Id :=self.Count;
AddCampo.NomePrincipal:=campo1;
AddCampo.NomeSecundario:=campo2;
self.Add(addcampo); //Debugando este self e igaul a nil
end;
Se alguem puder me ajudar eu agradeço.
function TColecaoCampos.Add(Campo: TCampo): TCampo;
begin
result :=inherited Add as TCampo; //O erro Acontece aqui.
end;
function TColecaoCampos.Add(Campo1:String;Campo2:String): TCampo;
var
AddCampo:TCampo;
begin
AddCampo:=TCampo.Create();
AddCampo.Id :=self.Count;
AddCampo.NomePrincipal:=campo1;
AddCampo.NomeSecundario:=campo2;
self.Add(addcampo); //Debugando este self e igaul a nil
end;
Se alguem puder me ajudar eu agradeço.
Rogeriorock
Curtidas 0
Respostas
Micheus
20/06/2006
Já tentou fazer a chamada sem utilizar self.
...
AddCampo.NomeSecundario:=campo2;
Add(addcampo);
end;
...
AddCampo.NomeSecundario:=campo2;
Add(addcampo);
end;
GOSTEI 0
Rogeriorock
20/06/2006
Sim ja tentei, mas da mesma como era de se esperar, como não posso perder mt tempo com isto resolvo o problama da sequinte forma, vai um esquema a abaixo.
Classe1
metodos
properiredades
etc....
end
Classe2
private
_Campo:Classe1;
Function GetClasse1:Classe1;
public
Porperty Class1:Class1 read GetClasse1 write _Class1;
implement
Function Class2.GetClass1:Class1
begin
if _class1=nil then
_Class1:=Classe1.Create;
result:=_Class1;
end;
E meio tosco mas resolve tirei o create do Construtor da Classe e coloquei direto na chamada da propriedade, ate que eu endenda este misterio rsrsrsrs
Classe1
metodos
properiredades
etc....
end
Classe2
private
_Campo:Classe1;
Function GetClasse1:Classe1;
public
Porperty Class1:Class1 read GetClasse1 write _Class1;
implement
Function Class2.GetClass1:Class1
begin
if _class1=nil then
_Class1:=Classe1.Create;
result:=_Class1;
end;
E meio tosco mas resolve tirei o create do Construtor da Classe e coloquei direto na chamada da propriedade, ate que eu endenda este misterio rsrsrsrs
GOSTEI 0
Micheus
20/06/2006
olhando um pouco melhor, tenho uma pergunta: Vc aponta no comentário que o erro ocorre na atribuição à result, certo? Neste caso, pergunto se vc tem um método Add (apenas - sem parâmetros), se tiver como está declarado.
function TColecaoCampos.Add(Campo: TCampo): TCampo; begin result :=inherited Add as TCampo; //O erro Acontece aqui. end;
GOSTEI 0
Rogeriorock
20/06/2006
Não tenho, a classe que eu criei herda de TCollection, e a documentação especifica que vc declare um metodo add que receba o tipo que vc quer usar , que tem que herdar tb de TCollectionItem.Ja estou acustumado a usar este tipo de classe e nunca tive este problemas, na verdade ate neste projeto eu tenho outras classes deste tipo que estão funcionando bem.As declaraçoes estão a baixo
function Add(Campo:TCampo):TCampo;overload;//Esta e a declaração basica da classe.
function Add(Campo1:String;Campo2:String):TCampo;overload;//Este e o overload que crie para poder estanciar o tipo so pasando alguns parametros.
function Add(Campo:TCampo):TCampo;overload;//Esta e a declaração basica da classe.
function Add(Campo1:String;Campo2:String):TCampo;overload;//Este e o overload que crie para poder estanciar o tipo so pasando alguns parametros.
GOSTEI 0