Fórum Access Violation em Objeto instanciado. #323818

20/06/2006

0

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.


Rogeriorock

Rogeriorock

Responder

Posts

20/06/2006

Micheus

Já tentou fazer a chamada sem utilizar self.

...
AddCampo.NomeSecundario:=campo2;
Add(addcampo);
end;


Responder

Gostei + 0

20/06/2006

Rogeriorock

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


Responder

Gostei + 0

21/06/2006

Micheus

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;



Responder

Gostei + 0

22/06/2006

Rogeriorock

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.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar