Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:11 Der er 24 kommentarer og
1 løsning

C# giver : denotes a field where a class was expected

Hej Eksperter.

Jeg får nedenstående fejl, når jeg forsøger at kompilere mit C#.NET projekt :

Main.cs(38,4): error CS0118: 'Namespace.Class.myObject' denotes a 'field' where a 'class' was expected.

Hvad er der galt ??
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:12 #1
Hvad står der i Main.cs linie 38 ?
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:17 #2
Line 38 : myObject.showResults(123);

Og I kan også lige få hele filen, som objektet ligger i :

namespace Namespace
{
    class Class
    {
       
        int haps;
       
        public void showResults(int ints)
        {
            haps = ints;
        }
       
    }
}
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:20 #3
Har du en:

Class myObject = new Class();

erklæring ?
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:20 #4
PS: Jeg tror klassenavnet Class kan give anledning til forvirring
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:21 #5
Kan vi se lidt kode ovenover linie 38 f.eks. 30-38 ?
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:23 #6
Arne > Det ved jeg - jeg har kun kaldt den Class for jeres skyld - bare for at lette forståelsen i netop dette spørgsmål.

Ja, jeg har skam skabt mit objekt.

Jeg kan lige uploade begge filer som de ser ud. Øjeblik
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:25 #7
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:27 #8
Du kan ikke referere til en ikke static variabel (myResults) i en static metode (Main).
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:28 #9
Enten skal

private Results myResults;

ændres til

private static Results myResults;
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:29 #10
Eller så skal

   
        public static void Main()
        {
           
            myResults.showResults(123);
           
        }
   
ændres til:

   
        public static void Main()
        {
            Konkurrence k = new Konkurrence();
            k.myResults.showResults(123);
           
        }
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:30 #11
Aha, dérfor. Men hvis de begge er static (hvilket i øvrigt betyder hvad?), så får jeg fejlene :

Del3\Main.cs(38,4): error CS0118: 'DCK.Konkurrence.myResults' denotes a 'field' where a 'class' was expected
Del3\Resultats.cs(12,4): error CS0120: An object reference is required for the nonstatic field, method, or property 'DCK.Results.haps'

Build complete -- 2 errors, 0 warnings
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:33 #12
Øh

Det her oversætter hos mig:

using System;

namespace DCK
{
    public class Konkurrence
    {
       
        private static Results myResults; // Reference til objektet 'Results'
       
        // Ved programstart skabes det nye objekt
        void MainFormLoad()
        {
            myResults = new Results();
        }
       
        public static void Main()
        {
           
            myResults.showResults(123);
           
        }
       
    }
    class Results
    {
       
        int haps;
       
        public void showResults(int ints)
        {
            haps = ints;
        }
       
    }
}
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:33 #13
static betyder = 1 forekomst per klasse også selv der er flere instanser af klassen
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:34 #14
Dit eksempel giver hos mig flg. fejl :

Del3\Resultats.cs(5,8): error CS0101: The namespace 'DCK' already contains a definition for 'Results'
Del3\Main.cs(24,11): (Location of symbol related to previous error)
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:35 #15
Sorry, havde glemt at fjerne min results.cs
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:36 #16
Det med static er jeg vist ikke helt med på.

Der kan vel kun være én metode med det samme navn ?!
Og hvad vil det sige at der er flere instanser af en klasse ?
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:36 #17
(Jeg er næsten lige startet på C#, så jeg skal lige have en chance for at lære det hele :)
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:38 #18
flere instanser = flere forekomster

A a1 = new A();
A a2 = new A();

er 2 forekomster eller 2 instanser af klassen A.
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:39 #19
Jeg kan godt lave et eksempel på static
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:40 #20
Vil det sige at jeg kun kan kalde min metode (myResults) én gang for hvert objekt (a1, a2) ?
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:40 #21
Det må du gerne :)
Avatar billede arne_v Ekspert
19. oktober 2004 - 19:43 #22
using System;

public class Demo
{
    private static int si = 0;
    private int nsi = 0;
    public Demo()
    {
        si++;
        nsi++;
    }
    public void printNsi()
    {
        Console.WriteLine(nsi);
    }
    public static void printSi()
    {
        Console.WriteLine(si);
    }
    public static void Main()
    {
        Demo d1 = new Demo();
        Demo d2 = new Demo();
        d1.printNsi();
        d2.printNsi();
        Demo.printSi();
    }
}
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:48 #23
Ok, og si kan kun kaldes én gang. Jeg kan endnu ikke se hvad det kan bruges til - men det finder jeg vel ud af på et senere tidspunkt, når mine programmer bliver mere avanceret.
Avatar billede webcreator Nybegynder
19. oktober 2004 - 19:56 #24
Tak for hjælpen - det var rart at få løst mit problem. Har plaget mig hele dagen :)
Smider du et svar?

Du må også meget gerne kigge på http://eksperten.dk/spm/552248  hvis du gider
Avatar billede arne_v Ekspert
19. oktober 2004 - 20:09 #25
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester