Gå til innhold

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


Anbefalte innlegg

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
Lenke til kommentar
Videoannonse
Annonse

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

Lenke til kommentar

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
Lenke til kommentar

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.

Lenke til kommentar

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.

Lenke til kommentar

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...

Lenke til kommentar
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å -

Lenke til kommentar

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å
×
×
  • Opprett ny...