1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

erro C#!!! Urgente!!!

Discussão em 'Programação' iniciada por elcomandante66, 12 de Junho de 2012. (Respostas: 1; Visualizações: 671)

  1. O problema que tenho é o seguinte.
    Declarei uma classe "xx", tenho uma variavel do tipo "xx" no form1 .
    Para iniciar uma variável no form1 faço uma atribuição de valor de um campo da classe teste.
    Faço alguns cálculos com a variável local, e assim que ela fica com um valor esse valor passa automaticamente para o objecto da classe "teste", sem fazer nenhum set. E como preciso de passar várias vezes pela função Doc, a variavel abc fica sempre com o ultimo valor em vez de guardar os valores passados.
    Alguém me consegue resolver este problema
    Fica aqui excerto do código

    "xx.cs"

    public class xx
    {
    int[] abc; //declaracao variavel

    public int[] getABC()
    {
    return abc;
    }

    public void setABC(float abc)
    {
    this.abc= abc;
    }
    }

    "form1.cs"

    public partial class Form1 : Form
    {
    public xx varx = new xx();

    private void Doc(int z) //z pode ter um valor o valor 0 a 3
    {
    int[] a;


    a= varx.getABC(); //nesta atribuiçao a fica com o tamanho 3, que é o tamanho do vector abc.
    if(z==0)
    a[z] = 1;// a variavel a fica com este valor mas a variavel abc da classe xx tambem fica com o valor, só que não devia de ficar, uma vez que não lhe faço um set
    if(z==1)
    a[z] = -1;
    if(z==2 || z==3)
    a[z] = 0;

    varx.setABC(a);

    }


    }
     
  2. Traveller99

    Traveller99 Xtreme BOINC

    Vamos por partes:

    Na classe xx:
    1º onde está o construtor?
    2º se o array abc é de inteiros, porque é que na função setABC tens como argumento um float?

    Na Form:
    Supondo que não tens mais código a correr, a= varx.getABC(); vai-te returnar um ponteiro null, isto porque o array abc na Classe xx nunca foi inicializado.
    Caso o array tenho sido inicializado algures, isso vai-te devolver um ponteiro para esse mesmo array. Ou seja, fazeres abc[0] = 1; ou a[0] = 2, vai-te mexer na mesma posição de memória, na prática estás a alterar a mesma coisa. Não são arrays diferentes, são duas variáveis que apontam para a mesma posição de memória.
    Outra nota,
    if(z==2 || z==3)
    a[z] = 0;
    cuidado aqui. Dizes acima que o array tem tamanho 3, ora então os elementos dele estão entre 0 e 2. De receberes um z=3 o programa vai estourar uma vez que a[3] não existe.
    Por fim, se queres fazer um set ao array abc, parece-me que queres copiar os elementos do array que recebes em argumento. O código que tu tens mais uma vez só te está a copiar o ponteiro, não o array. Para copiar arrays tens um método já disponível, dá uma olhadela aqui. ;)
     

Partilhar esta Página