Gå til innhold

C#: [Hjelp] Hvorfor skjer dette?(deklarering)


Anbefalte innlegg

Skrevet (endret)

Holder på med et prosjekt, hvor plasseringen av deklarasjonene til to variabler har noe å si for programmets funksjonalitet

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;


namespace Logarithms
{
 class Myfuncs
{
	 int count = 0;//problemet er her
	 int[,] arrayStorage = new int [30,4];//og her..
	public static void List(int type, int indexStart, int indexEnd, int value )
	{

		if (type >= 9 && type <= 14)
		{
			arrayStorage[count, 0] = type;
			arrayStorage[count, 1] = indexStart;
			arrayStorage[count, 2] = indexEnd;
			arrayStorage[count, 3] = value;
			count ++;
			return;
		}

	}
}
}

Når jeg prøver å kompilere denne koden, kommer følgende feilmelding opp "An object reference is required for the nonstatic field, method, or property 'Logarithms.Myfuncs.arrayStorage". Den samme kommer opp for count.

Hvis jeg derimot deklarer dem innenfor funksjonen de blir brukt i, går det helt fint. Er det noen som vet hvorfor jeg ikke kan plassere deklareringene der de er?

Edit: rettet en feil i koden.

Endret av Velena
Videoannonse
Annonse
Skrevet

http://blogs.msdn.com/ericlippert/archive/...s-part-one.aspx

 

Legg til en constructor, og initialiser variablene der.

 

namespace Logarithms
{
 class Myfuncs
 {
int count;
int[,] arrayStorage;

public MyFuncs()
{
  count = -1;
  arrayStorage = new int [30,4];
}

public static void List(int type, int indexStart, int indexEnd, int value )
{
  if (type >= 9 && type <= 14)
  {
	arrayStorage[count, 0] = type;
	arrayStorage[count, 1] = indexStart;
	arrayStorage[count, 2] = indexEnd;
	arrayStorage[count, 3] = value;
	count ++;
	return;
  }
}
 }
}

Skrevet (endret)

Takker Geirgrusom, men det virker fortsatt å være noe galt. Compileren forteller meg at

Myfuncs() må ha en "return type".

Edit: Fant en liten skrivefeil i koden din, kompileren gir nå den samme feilen som i utgangspunktet (regner med at MyFuncs skulle være Myfuncs).

Endret av Velena
Skrevet

Menneh... vil ikke den koden din prøve å lagre inn første informasjonen i arrayStorage[-1,0] ? Negative indexer er vel ikke noe særlig

 

En annen ting er om du heller burde opprettet en struct eller klasse og så laget en List<T> av denne, f.eks.

 

Det der så ekstremt lite oversiklig ut, og lett å gjøre feil.

Skrevet

Du har et poeng når det gjelder indexen, hadde originellt hentet count verdien fra en annen form, hvor verdien til count økte før jeg la verdier i arrayStorage, derfor var default verdien -1. Hva skal List <T> være? Når det gjelder det siste du sa føler jeg det er oversiktlig nok til mitt formål.

Skrevet

Ja, jeg tror jeg heller ville laget en struktur i en array istedet

 

public struct FunkEntry
{
 private int m_type;
 private int m_index_start;
 private int m_index_end;
 private int m_value;
 public int Type { get { return m_type; } set { m_type = value; } }
 public int IndexStart { get { return m_index_start; } set { m_index_start = value; } }
 public int IndexEnd { get { return m_index_end; } set { m_index_end = value; } }
 public int Value { get { return m_value; } set { m_value = value; } }
 public FunkEntry(int type, int start, int end, int value)
 {
m_type = type; m_index_start = start; m_index_end = end; m_value = value;
 }
}

public class MyFuncs
{
 private List<FunkEntry> m_entries;
 public List<FunkEntry> Entries { get { return m_entries; } }
 public FunkEntry this[int index]
 {
get { return m_entries[index]; }
set { m_entries[index] = value; }
 }
 public MyFuncs()
 {
m_entries = new List<FunkEntry>();
 }
}

public static class Program
{
 static void Main()
 {
MyFuncs funk = new MyFuncs();
funk.Entries.Add(new FunkEntry(0, 0, 1, 100));
Console.WriteLine(funk[0].Value.ToString());
 }
}

 

For ekesempel da...

Skrevet

Det du nettopp viste er noe nytt for meg, blir det noe slikt hvis jeg skal sette en verdi i FunkEntry?:

Myfuncs.FunkEntry[2].Set(9);

Skrevet

Hvis det er hele forskjellen, tror jeg at jeg vil holde meg til det jeg er trygg på.

Men problemet med deklareringen er fortsatt ikke løst, selv om jeg plasserer dem i constructoren kommer fortsatt den samme feilmeldingen opp.

Skrevet
Hvis det er hele forskjellen, tror jeg at jeg vil holde meg til det jeg er trygg på.

Men problemet med deklareringen er fortsatt ikke løst, selv om jeg plasserer dem i constructoren kommer fortsatt den samme feilmeldingen opp.

Problemet er at funksjonen er statisk mens variablene ikke er det.

Enten endre funksjonen til å ikke være statisk, eller gjør variablene statiske.

 

- grå -

Skrevet

Tenker jeg lærer meg det en annen gang. Off topic: Er det noen som vet om en bra Actionscript ressurs på nettet, og i hvilket delforum burde jeg stille spørsmål om actionscript?

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...