Hjælp til C# projekt. Får objekt-reference fejl

Tags:    .net

<< < 12 > >>
Hej
Er gået i gang med et større projekt på skolen. Vi koder i C# og jeg går på 2.sem.
Vi har skulle skabe et "Register" (Ligesom et kasseapparat) som skal kunne klare at ordne et salg og senere hen har vi tilkoblet en kunde med oplysninger til salget. Både varer og kunden er hardcodede ind i starten. Alt dette er gået fint ved at skabe følgende klasser:
Store (Butik)
Register
Customer
CustomerCatalog
Product
ProductCatalog
Sale
SalesLineItem

Register er min controller og alt går igennem den. Da det hele blev harcodede ind kunne jeg godt få lortet til at virke, men nu har vi fået besked på at smide GUI på, hvilket ikke umiddelbart virker vanskeligt. Men det er det åbenbart for mig :/

Jeg skal nu skabe en form som man kan bruge til at oprette varer som så skal kunne gemmes i min arraylist som ligger i ProductCatalog. Vi har fået af vide af læren at da Register er controller skal alt fra GUI og ned til model-niveauet foregå igennem Register-klassen.

Det her er første gang vi for det første skaber så store et projekt selv og første gang vi skal "Add" til et projekt. Jeg tror jeg har gjort det rigtigt, men er dog ikke sikker.
Jeg har skabt 1 get og 1 set-metode i Register-klassen, som henholdsvis bruges til at hente det jeg indtaster om varen i textboxene og føre det ned i Register-klassen, her bliver det smidt over i get-metoden som så bliver kaldt af en anden metode i min ProductCatalog-klasse. Her bliver det så tilføjet min Arraylist til vare (Lidt ligesom et lager).

Kan godt se meningen med alt det her, MEN jeg får følgende fejl:

Error 1 An object reference is required for the nonstatic field, method, or property 'Register.SetCreateProduct(ProductDescription)' (Form2.cs 40)

Error 2 An object reference is required for the nonstatic field, method, or property 'Register.GetCreateProduct()' i linje 67 (Kasseregister2)

ER DER IKKE EN VENLIG SJÆL DER GIDER AT HJÆLPE MIG MED DET HER, HAR SPILDT EN HEL UGE PÅ DET HER ALLEREDE UDEN AT KOMME VIDERE

Kode:
Fold kodeboks ind/udKode 




Jeg har tilknyttet hele projekt som fil.
http://www.sendspace.com/file/892yfp





Indlæg senest redigeret d. 25.04.2008 20:49 af Bruger #12411
13 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Start med at kigge på de fejl du får smidt i hovedet.

Error 1:

Error 1 An object reference is required for the nonstatic field, method, or property 'Register.SetCreateProduct(ProductDescription)' (Form2.cs 40)


An object reference is required for the nonstatic field...

Det vil sige du skal have en reference eller oprettet en ny instans. f.eks

Fold kodeboks ind/udKode 


Error 2:

Error 2 An object reference is required for the nonstatic field, method, or property 'Register.GetCreateProduct()' i linje 67 (Kasseregister2)


Igen 'An object reference is required...', så her skal du igen have oprettet en reference.

Håber det er noget du kan bruge.

EDIT:

Så i stedet for dette:
Fold kodeboks ind/udKode 


vil jeg tro du skal have dette:
Fold kodeboks ind/udKode 


Skal lige siges, at jeg har ikke testet det.

Ps Læg venligst din kode i en kodeboks næste gang, så er det nemmere at overskue koden.



Indlæg senest redigeret d. 25.04.2008 20:41 af Bruger #6559
Det ligner da meget et eksempel fra min gamle ven Craig Larman, jeg gad desværre bare aldrig læse i Applying UML and patterns!!!

Når du skal bruge Register som controller skal du have mulighed for at få fat i den. Hvis du kun ønsker at have een instans af den er det rigtigt, når du bruger singleton.

I dit projekt er der to muligheder for at få fat i en Register:
Store.GetInstance().getRegister()

Register.GetInstance(ProductCatalog catalog, CustomerCatalog custCatalog)

Når du bruger den øverste har du et problem, forbi den instans, du får retur vil være null. Du bliver nødt til at lave en instans af Register i Store før du returnerer den.

Den anden mulighed giver også problemer, da GetInstance methoden kræver parametre. Nu skal du ned i din model og lave instanser før du kan få fat i en instans af din controller, som er indgang til modellen. Håber du kan se problemet.

Jeg var lige inde og finde bogen i mine gemmer. Craig og jeg ser ud til at være enige om at du skal bruge Store til at lave en instans af Register. Det er stores ansvar at lave instanser af de objekter, som Register har brug for, for at kunne fungere.

Håber svaret leder dig i den rigtige retning.



Hm den æder det ikke rigtigt.
Får følgende fejl. Har stiret mig helt blind på det.

Error 1 Use of unassigned local variable 'nyRegister' \\Form2.cs l. 42, 9

Error 2 An object reference is required for the nonstatic field, method, or property 'Register.GetCreateProduct()'\\KasseRegister2.cs l. 67, 35
Sry for måden jeg har sat det op, skal huske det til en anden gang, tak for alt den hjælp du kan tilbyde



Sry en lille rettelse, det skal være

Register nyRegister = new Register();

Jeg ved godt den vil lave en ny instans af din klasse, men jeg tror desværre det er nødvendigt.





Det her er meget nyt for mig, men er det ikke netop det som min singleton i Store-klassen og singleton i Register-klassen er til for at undgå?



Jo, nu har jeg ikke fuld oversigt over din kode, fordi jeg ikke har en editor inde pt, men ellers kan du ændre din funktion SetCreateProduct til at være static, men det kan give nogle komplektioner med resten af din kode.

Du kan evt se om du kan nå din Register r så du skriver

r.setCreateProduct, da den er sat, men jeg ved det ikke lige.



Hm tja det vil sgu ikke rigtig virke med mindre jeg skriver Store s = Store.GetInstance();
Register r = s.getRegister();
Igen og igen der hvor jeg bruger r. som i r.setCreateProduct og det kan ikke være rigtigt.



Okay, jeg har lige læst fundet lidt mere om singleton. Prøv med følgende:

Register.instance.SetCreateProduct(desc);

Ellers så er jeg ved at løbe tør for løsninger.



Det er helt rigtigt at det er projektet fra Larmans bog, bare skrevet i C# istedet. Har desværre ikke rigtig tid i dag til at få kigget på det, men vil meget gerne have jeres hjælp/ekspertise igen i morgen når jeg kaster mig over det.



Hm har nu siddet i et par dage endnu engang og kæmpet med det her l***, med lidt hjælp fra en anden side fik jeg også mit program til at køre. jeg kan indtaste en ny vare ude i min UI og så troede jeg at jeg fik sendt den ned i min Register klasse og videre til min ArrayList i min ProductCatalog-klasse, men ak nej. Jeg tror ikke den kommer frem. For hvis jeg prøver at få vist indholdet af min ArrayList i selv samme form ved hjælp af en opdater knap og en listbox, så dukker der ingen ting op. Jeg har prøvet at hardcoded en vare ind og det kan sagtens lykkedes at få den op i listboxen, ergo er det bindeledet fra jeg skriver den ind i UI og til den rammer ProductCatalog der er noget galt med, MEN HVAD?????

Form2 UI:
Fold kodeboks ind/udKode 


Register-klassen:

Fold kodeboks ind/udKode 


ProductCatalog-klassen:

Fold kodeboks ind/udKode 


Store-klassen:

Fold kodeboks ind/udKode 


Hvis jeg prøver at gør lidt som du siger Hans Jørgen og lader Store være den som opretter en ny Register instans og ikke Register r = r.GetInstance(), så får jeg fejl meddelser



<< < 12 > >>
t