joelcricardo Posted December 8, 2009 at 06:28 PM Report Share #299314 Posted December 8, 2009 at 06:28 PM Boa noite, Quando vou a correr este código dá me o seguinte erro: Foi lançada a excepção System.NullReferenceException no depurado: A referência de objecto não foi definida como uma instância de um objecto CÓDIGO: namespace trabalho_pratico_2 { //Criação da classe pessoas--------------------------------------------------------------------- public class variaveis { public class pessoa { public int id; public string nome; public string login; public string password; } //Criação do contador das pessoas da base de dados public static int nr_pessoas = 1; //Criação do vector de armazenagem das pessoas public static pessoa[] vector = new pessoa[10]; } //Criação do formulário de adição de utilizadores--------------------------------------------------------- public class add_util : Form { //declaração dos componentes do formulário public static Button ad = new Button(); public static Button sair = new Button(); public static Label user = new Label(); public static Label pass = new Label(); public static Label pass2 = new Label(); public static Label id = new Label(); public static Label nome = new Label(); public static Label titulo = new Label(); public static TextBox usert = new TextBox(); public static TextBox passt = new TextBox(); public static TextBox pass2t = new TextBox(); public static TextBox idt = new TextBox(); public static TextBox nomet = new TextBox(); //Compor o formulário com os componentes anteriormente inseridos public add_util() { //designações titulo.Text = "Adição de utilizadores"; ad.Text = "Adicionar"; sair.Text = "Sair"; user.Text = "USER:"; pass.Text = "PASS:"; pass2.Text = "RE-PASS"; nome.Text = "NOME:"; id.Text = "ID:"; //fazer aparecer os componentes Controls.Add(titulo); Controls.Add(ad); Controls.Add(sair); Controls.Add(user); Controls.Add(pass); Controls.Add(pass2); Controls.Add(nome); Controls.Add(id); Controls.Add(usert); Controls.Add(passt); Controls.Add(pass2t); Controls.Add(nomet); Controls.Add(idt); //tamanhos & costomizações Size = new Size (400,300); titulo.Size = new Size(400,50); titulo.Font = new Font("verdana", 14); titulo.TextAlign = ContentAlignment.BottomCenter; sair.Size = new Size(100,50); ad.Size = new Size(100,50); id.Font = new Font("verdana" ,10); user.Font = new Font("verdana" ,10); pass.Font = new Font("verdana" ,10); pass2.Font = new Font("verdana" ,10); nome.Font = new Font("verdana" ,10); usert.Size = new Size(100,50); idt.Size = new Size(100,50); passt.Size = new Size(100,50); pass2t.Size = new Size(100,50); nomet.Size = new Size(100,50); //Localizações sair.Location = new Point(100,200); ad.Location = new Point(200,200); id.Location = new Point(100,72); nome.Location = new Point(100,92); user.Location = new Point(100,112); pass.Location = new Point(100,132); pass2.Location = new Point(100,152); idt.Location = new Point(200,72); nomet.Location = new Point(200,92); usert.Location = new Point(200,112); passt.Location = new Point(200,132); pass2t.Location = new Point(200,152); //Funções dos botões sair.Click += new EventHandler(sair_click); ad.Click += new EventHandler(ad_click); } public void sair_click(object sender,EventArgs e) { Application.Exit(); } public void ad_click(object sender, EventArgs e) { add_util.nomet.Text = "asgtertqefasfa"; } } //Criação do formulario de abertura------------------------------------------------------------------ public class entrada : Form { //Declaração dos componentes do formulário public static Button util = new Button(); public static Button man = new Button(); public static Label titulo = new Label(); //Compor o formulário com o que queremos e o que já foi declarado public entrada() { //tamanho do formulário Size = new Size (400,300); //fazer aparecer os componentes Controls.Add(util); Controls.Add(man); Controls.Add(titulo); //tamanhos & costomizações util.Size = new Size (200,100); man.Size = new Size(200,100); //localizações util.Location = new Point (0,100); man.Location = new Point (200,100); //descrições util.Text = "Adicionar"; man.Text = "Manutenção"; titulo.Text = ("Trabalho Prático 2"); titulo.Size = new Size(400,50); titulo.Font = new Font("verdana", 14); titulo.TextAlign = ContentAlignment.BottomCenter; } } //Main do programa---------------------------------------------------------------------------------------- class Program { public static void Main(string[] args) { add_util a = new add_util(); Application.Run(a); variaveis.pessoa[] vectors = new variaveis.pessoa[10]; vectors[1].id = 1; Console.ReadKey(true); } } } Alguém sabe o porque? É que eu já corri a internet toda e não tem nada a explicar! Agradecia mesmo uma pequena ajuda. Cumprimentos, Joel Link to comment Share on other sites More sharing options...
Rui Felgueiras Posted December 8, 2009 at 06:32 PM Report Share #299316 Posted December 8, 2009 at 06:32 PM Mas em que linha dá esse erro? Link to comment Share on other sites More sharing options...
joelcricardo Posted December 8, 2009 at 06:54 PM Author Report Share #299326 Posted December 8, 2009 at 06:54 PM nesta: vectors[1].id = 1; mesmo ao fundo Link to comment Share on other sites More sharing options...
Rui Felgueiras Posted December 8, 2009 at 06:59 PM Report Share #299330 Posted December 8, 2009 at 06:59 PM O problema penso que está na tua classe "pessoa". Não tem método construtor definido. public class pessoa { public int id; public string nome; public string login; public string password; public pessoa() { } } Penso que isto irá resolver o teu problema 😉 Link to comment Share on other sites More sharing options...
Baderous Posted December 8, 2009 at 07:07 PM Report Share #299335 Posted December 8, 2009 at 07:07 PM Isso é porque na classe chamaste-lhe "vector" e depois usaste como "vectors". Link to comment Share on other sites More sharing options...
joelcricardo Posted December 8, 2009 at 07:10 PM Author Report Share #299337 Posted December 8, 2009 at 07:10 PM Rui, não funcionou, ficou na mesma! Sinceramente não compreendo. Ele depois de estar construído não devia ser um tipo de dados? Como string? Conseguem encontrar mais alguma coisa mal? Link to comment Share on other sites More sharing options...
joelcricardo Posted December 8, 2009 at 07:12 PM Author Report Share #299338 Posted December 8, 2009 at 07:12 PM Baderous, são dois vectores diferentes 😉 Link to comment Share on other sites More sharing options...
Rui Felgueiras Posted December 8, 2009 at 07:20 PM Report Share #299341 Posted December 8, 2009 at 07:20 PM O problema é o seguinte: quando instancias a variavel "vectors" como um array de "pessoa" significa que estás a criar um array com 10 posições que podes lá colocar objectos do tipo "pessoa". O que não acontece nestes casos é que cada uma das posições não fica instanciada, fica sim a NULL. Assim, terás que percorrer todas as posições com um simples ciclo for para instanciar cada uma das posições. Não custa nada.... fácil, fácil. Não estás a usar o Visual Studio? Se estivesses vias logo qual era o problema, bastava colocar o rato por cima da variável "vectors" e verificar o que estava lá dentro 😉 Link to comment Share on other sites More sharing options...
joelcricardo Posted December 8, 2009 at 07:22 PM Author Report Share #299342 Posted December 8, 2009 at 07:22 PM Como é que eu faço esse ciclo? Sim eu estou a usar o VisualStudio e já vi as minhas posições a Null. Mas como não as sei instanciar...LOL Ajudas-me? Link to comment Share on other sites More sharing options...
Rui Felgueiras Posted December 8, 2009 at 07:26 PM Report Share #299345 Posted December 8, 2009 at 07:26 PM Claro que ajudo... Irá ficar assim: variaveis.pessoa[] vectors = new variaveis.pessoa[10]; for (int i = 0; i <= vectors.Length - 1; i++) { vectors = new variaveis.pessoa(); } vectors[1].id = 1; Já agora para que queres a última linha de código?? Queres ler alguma coisa da consola? Link to comment Share on other sites More sharing options...
joelcricardo Posted December 8, 2009 at 07:32 PM Author Report Share #299346 Posted December 8, 2009 at 07:32 PM Pronto!!! Muito obrigado a todos e em especial ao Rui que me ajudou muito claro! Rui a ultima linha de código é para me mostrar se esta a gravas as coisas no vector 😉 Mais uma vez muito obrigado Rui! Um grande abraço 😛 Link to comment Share on other sites More sharing options...
joelcricardo Posted December 8, 2009 at 07:33 PM Author Report Share #299347 Posted December 8, 2009 at 07:33 PM Já agora como é que fecho o tópico? Link to comment Share on other sites More sharing options...
Rui Felgueiras Posted December 8, 2009 at 08:04 PM Report Share #299355 Posted December 8, 2009 at 08:04 PM Não faço ideia 😉 Pergunta ao moderador Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now