Sono studente universitario ed all'università abbiamo approfondito bene il C con le sue struct... ma il Java è stato trattato in maniera fin troppo leggera e la teoria che ci sta dietro le classi del Java, ora che mi sto esercitando a programmare in C# (molto richiesto in ambito lavorativo), mi sarebbe stata molto comoda.
Ora stavo cercando di costruire una libreria per la costruzione di una tabella di Hash (già fatto in C con risultati eccellenti: 30+ all'esame di laboratorio) ma ammetto che l'uso di un array di struct è decisamente più semplice che usare due classi annidate come si dovrebbe fare in Java/C#.
Il codice in C# che ho prodotto fino a questo momento è il seguente:
Di seguito invece posto il codice del Main che utilizza la libreria Table postata sopra:codice:public class Table { protected class Record { private string data; private bool deleted; public Record() //costruttore generico { this.data = ""; this.deleted = false; } public Record(string data) //costruttore specifico { this.data = data; this.deleted = false; } public void add(string data) { if (deleted == true) this.deleted = false; this.data = data; } } private int dimTable; private static Record[] table; public Table(int dimTable) //costruttore di Table { //dovrebbe creare n (dove n == dimTable) istanze di Record table = new Record[dimTable]; this.dimTable = dimTable; } public void add(int idx, string data) { table[idx].add(data); } }
Il compilatore mi compila correttamente il codice senza darmi alcunché riguardo ad errori di sintassi o balle simili... però quando arriva all'istruzione table.add(0, "ciao"); il compilatore si ferma alla funzionecodice:namespace Project1 { class main { static Table table = new Table(10); public static void Main(string[] args) { table.add(0, "ciao"); Console.ReadLine(); } } }
e mi segnala l'errore NullReferenceException. (ed a quanto ho capito, sembra che Table non vada ad istanziare Record)codice:public void add(int idx, string data) { table[idx].add(data); }
Ci ho sbattuto più volte la testa ma non sono riuscito a tirar fuori nessuna soluzione... non riesco proprio a capire dove sto sbagliando e che tipo di errore faccio se di distrazione (caldo afoso/poca concetrazione) o se è proprio un errore concettuale.![]()
A questo punto spero che qualcuno di voi riesca ad illuminarmi e spiegarmi meglio. Ringrazio tutti quanti per l'aiuto didattico...![]()