• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

joelcricardo

Problema com variaveis especiais [Tipo de variavel pessoa que eu criei]

13 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é porque na classe chamaste-lhe "vector" e depois usaste como "vectors".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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 :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora