Jump to content

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


joelcricardo

Recommended Posts

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.