2013-11-21 145 views
-3

嘗試編譯我的C#代碼時,出現不一致的可訪問性錯誤。我已經廣泛使用了它,但是我發現所有的案例和答案都與一些私人公開的不確定性有關。我沒有在我的代碼中寫任何私人信息,我已經檢查並進行了雙重檢查。我在某處讀過一些我可以嘗試「降低範圍」的東西,但我不知道這意味着什麼。幫幫我。C#不一致的可訪問性

對不起失蹤的代碼,在這裏它是在github:
https://gist.github.com/jyggorath/7589742

using System; 

public class oblig5 { 

    // // // BEGIN GLOBAL 1 // // // 
    public const int STRLEN = 40; 
    public const int MAXPERSONER = 500; 
    public const int MAXLAG = 50; 
    public enum funksjon {trener, oppman, ingen}; 
    // // // END GLOBAL 1 // // // 

    // // // BEGIN PERSON CLASS // // // 
    public class Person { 
     // // // privates: 
     public string navn; 
     public string adr; 
     public string mail; 
     public string klasse; 
     public int tlf; 
     public funksjon verv; 
     public int lagnr; 

     // // // publics: 
     // constructor 
     public Person() { 
      navn = ""; adr = ""; mail = ""; klasse = ""; 
      tlf = 0; lagnr = 0; 
      verv = (funksjon)2; 
     } 

     // skriv: 
     public void skriv() { 
      Console.WriteLine("Navn: {0}\nAdresse: {1}\nMail: {2}\nKlasse: {3}\nTlf: {4}\nLagnr: {5}", navn, adr, mail, klasse, tlf, lagnr); 
      if (verv == (funksjon)0) 
       Console.WriteLine("Er Trener\n"); 
      else if (verv == (funksjon)1) 
       Console.WriteLine("Er Oppmann\n"); 
      else 
       Console.WriteLine("Har ikkeno verv\n"); 
      lag[lagnr].skriv(); 
     } 

     public void skriv2() { 
      Console.WriteLine("Navn: {0}\nAdresse: {1}\nMail: {2}\nKlasse: {3}\nTlf: {4}\n", navn, adr, mail, klasse, tlf); 
     } 

     // les: 
     public void les_data(int lnr) { 
      lagnr = lnr; 
      navn = les_str("Personens navn"); 
      adr = les_str("Personens adresse"); 
      mail = les_str("Personens mail"); 
      klasse = les_str("Hvilke klasse går personen i?"); 
      tlf = les_int("Personens telefonnr", 10000000, 99999999); 
      verv = les_enum(); 
     } 

     // fil: 
     public void skriv_til_fil(System.IO.StreamWriter file) { 
      file.WriteLine(navn); 
      file.WriteLine(adr); 
      file.WriteLine(mail); 
      file.WriteLine(klasse); 
      file.WriteLine(tlf); 
      file.WriteLine((int)verv); 
      file.WriteLine(lagnr); 
     } 

     public void les_fra_fil(System.IO.StreamReader file, string nvn) { 
      navn = nvn; 
      adr = file.ReadLine(); 
      mail = file.ReadLine(); 
      klasse = file.ReadLine(); 
      tlf = int.Parse(file.ReadLine()); 
      verv = (funksjon)int.Parse(file.ReadLine()); 
      lagnr = int.Parse(file.ReadLine()); 
     } 

     // sammenligninger: 
     public bool har_navn(string t) { 
      return (navn == t); 
     } 

     public bool har_verv(funksjon v) { 
      return (verv == v); 
     } 

     public bool tilhorer_lag(int n) { 
      return (lagnr == n); 
     } 
    } 
    // // // END PERSON CLASS // // // 

    // // // BEGIN LAG CLASS // // // 
    public class Lag { 
     // // // privates: 
     public string navn; 
     public string adr; 
     public string mail; 
     public string hjemmeside; 

     // // // publics: 
     public Lag() { 
      navn = ""; adr = ""; mail = ""; hjemmeside = ""; 
     } 

     public void skriv() { 
      Console.WriteLine("Lagnavn: {0}\nLagadresse: {1}\nLagmail: {2}\nLaghjemmeside: {3}\n", navn, adr, mail, hjemmeside); 
     } 

     public void les_data(string t) { 
      navn = t; 
      adr = les_str("Lagets adresse"); 
      mail = les_str("Lagets mail"); 
      hjemmeside = les_str("Lagets hjemmeside"); 
     } 

     public bool har_navn(string t) { 
      return (navn == t); 
     } 
    } 
    // // // END LAG CLASS // // // 

    // // // BEGIN GLOBAL 2 // // // 
    // things: 
    public static Person[] personer = new Person[MAXPERSONER + 1]; 
    public static Lag[] lag = new Lag[MAXLAG + 1]; 
    public static int siste_person = 0, siste_lag = 0; 

    // funskjoner: 
    public static void skriv_meny() { 
     Console.WriteLine("\n\nFØLGENDE KOMMANDOER ER LOVLIG:"); 
     Console.WriteLine("\tA = skriv ALT om En person"); 
     Console.WriteLine("\tB = skriv ALLE trenere ELLER oppmenn"); 
     Console.WriteLine("\tC = skriv ALT om et gitt lag"); 
     Console.WriteLine("\tL = nytt Lag legges inn"); 
     Console.WriteLine("\tP = ny Person legges inn"); 
     Console.WriteLine("\tQ = Quit/Avslutt"); 
    } 

    public static char les_char(string t) { 
     Console.Write(string.Concat("\n", t, ": ")); 
     char retur = Console.ReadLine().ToUpper()[0]; 
     return retur; 
    } 

    public static int les_int(string t, int min, int max) { 
     int retur = min - 1; 
     do { 
      Console.Write(string.Concat("\t", t, " (", min.ToString(), "-", max.ToString(), "): ")); 
      retur = int.Parse(Console.ReadLine()); 
     } while (retur < min || retur > max); 
     return retur; 
    } 

    public static string les_str(string t) { 
     return Console.ReadLine(); 
    } 

    public static funksjon les_enum() { 
     char ch = '\0'; 
     do { 
      Console.Write("\tT(rener) eller O(ppmann): "); 
      ch = Console.ReadLine().ToUpper()[0]; 
     } while (ch != 'T' && ch != 'O'); 
     return ((ch == 'T') ? (funksjon)0 : (funksjon)1); 
    } 

    public static int finn_person(string t) { 
     for (int i = 1; i <= siste_person; i++) 
      if (personer[i].har_navn(t)) 
       return i; 
     return 0; 
    } 

    public static int finn_lag(string t) { 
     for (int i = 1; i <= siste_lag; i++) 
      if (lag[i].har_navn(t)) 
       return i; 
     return 0; 
    } 

    public static void skriv_person() { 
     string nvn = les_str("Navn på person"); 
     int person_nr = finn_person(nvn); 
     if (person_nr == 0) 
      Console.WriteLine("Personen fins ikke"); 
     else 
      personer[person_nr].skriv(); 
    } 

    public static void skriv_verv() { 
     funksjon v = les_enum(); 
     for (int i = 1; i < siste_person; i++) { 
      if (personer[i].har_verv(v)) 
       personer[i].skriv(); 
     } 
    } 

    public static void skriv_lag() { 
     string lagnvn = les_str("Navn på lag"); 
     int lagnr = finn_lag(lagnvn); 
     if (lagnr == 0) 
      Console.WriteLine("Laget fins ikke"); 
     else { 
      lag[lagnr].skriv(); 
      for (int i = 1; i <= siste_person; i++) { 
       if (personer[i].tilhorer_lag(lagnr)) 
        personer[i].skriv2(); 
      } 
     } 
    } 

    public static void nytt_lag() { 
     if (siste_lag < MAXLAG) { 
      string lagnvn = les_str("Lagets navn"); 
      if (finn_lag(lagnvn) == 0) { 
       siste_lag++; 
       lag[siste_lag] = new Lag(); 
       lag[siste_lag].les_data(lagnvn); 
      } 
      else 
       Console.WriteLine("Laget fins fra før!"); 
     } 
     else 
      Console.WriteLine("Lag er full!"); 
    } 

    public static void ny_person() { 
     if (siste_person < MAXPERSONER) { 
      string lagnvn = les_str("Hvilke lag tilhører personen?"); 
      int lagnr = finn_lag(lagnvn); 
      if (lagnr != 0) { 
       siste_person++; 
       personer[siste_person] = new Person(); 
       personer[siste_person].les_data(lagnr); 
      } 
      else 
       Console.WriteLine("Laget fins ikke!"); 
     } 
     else 
      Console.WriteLine("Personer er fulle!"); 
    } 

    public static void skriv_til_fil() { 
     System.IO.StreamWriter file = new System.IO.StreamWriter("personer.dta"); 
     for (int i = 1; i <= siste_person; i++) { 
      personer[i].skriv_til_fil(file); 
     } 
    } 

    public static void les_fra_fil() { 
     string buffer; 
     try { 
      System.IO.StreamReader file = new System.IO.StreamReader("personer.dta"); 
      while ((buffer = file.ReadLine()) != null) { 
       siste_person++; 
       personer[siste_person] = new Person(); 
       personer[siste_person].les_fra_fil(file, buffer); 
      } 
     } 
     catch { 
      Console.WriteLine("Finner ikke filen!"); 
     } 
    } 
    // // // END GLOBAL 2 // // // 

    // // // BEGIN MAIN // // // 
    public static void Main() { 
     char kommando; 

     les_fra_fil(); 
     skriv_meny(); 
     kommando = les_char("Ønske"); 
     while (kommando != 'Q') { 
      switch (kommando) { 
       case 'A': 
        skriv_person(); break; 
       case 'B': 
        skriv_verv(); break; 
       case 'C': 
        skriv_lag(); break; 
       case 'L': 
        nytt_lag(); break; 
       case 'P': 
        ny_person(); break; 
       default: 
        skriv_meny(); 
        break; 
      } 
      kommando = les_char("Ønske"); 
     } 
     skriv_til_fil(); 
     Console.WriteLine("\n"); 
    } 
    // // // END MAIN // // // 
} 

對不起,我奇怪的變量名。這是從我的挪威老師的C++作業移植的代碼(我沒有改變他們,因爲我也是挪威人,我從來沒有想過我會遇到這些問題)

正如你所看到的,在我的代碼是公開的。所以這不是我的問題。這些錯誤是在第126行和第127行以及第160行上生成的。這些錯誤處理的是我的自定義類作爲類型分配變量,並且函數返回自定義枚舉類型。幫幫我?

+2

請發佈代碼並清楚地說明你在做什麼以及你得到的錯誤。 –

+0

如何張貼一些代碼 –

回答

1

我的心理調試的感覺告訴我,你,如果你想的MyType公共領域不是在聲明一個類爲公共

public class MyType 

,這是不夠的,只需鍵入class MyType你必須使它公開明確。

+0

嗷,我剛剛有一個寒戰,我的脊椎,是你;-) –

+0

我使用的兩個類都是公開的。並且主要的東西必須包裝進去。下面是我的代碼在github上的一個url:https://gist.github.com/jyggorath/7589742對不起奇怪的函數名稱。我正在從我的挪威C++老師創建的任務中移植代碼。 – jyggorath