Konsol-Projekt

dartox

Erfahrenes Mitglied
Hi!

Ne Parallelklasse hatte Informatik Test, und nun hab ich von jemanden der eine 1 bekommen hat, den Test genommen, und den Code im PC eingegeben.

Code:
using System;

namespace Informatik_SMÜ2_14._1._2005
{
	/// <summary>
	/// Zusammenfassung für Class1.
	/// </summary>
	class SMUE
	{
		/// <summary>
		/// Der Haupteinstiegspunkt für die Anwendung.
		/// </summary>
		[STAThread]
		static void Main(string[] args)
		{
			private struct Adresse
			{
				string Strasse;
				private struct Haus
				{
					int Nummer;
					int Stiege;
				}
				Haus H;
			}
			Adresse[] ad = new Adresse[5];
			try
			{
				Console.Write("Bitte Strasse eingeben: ");
				ad[4].Strasse = Console.ReadLine();
			}
			catch
			{
				MessageBox.Show("Fehler");
			}
		}
	}
}

Aber es funktioniert nicht, es kommen nur fehler. Hat jemand von euch ne Ahnung warum?

Im Anhang ist ein Bild, wo eben viele Wörter rot unterstrichen sind, und solche ToolTips wie bei dem Wort "try" auftauchen, wenn ich mit der Maus drüber fahre.

Danke.

MfG dartox
 

Anhänge

  • fehler.jpg
    fehler.jpg
    78,2 KB · Aufrufe: 62
Man kann keine struktur in der main definieren.
Richtig müsste es so heißen:

Code:
using System;
namespace Informatik_SMÜ2_14._1._2005
{
 /// <summary>
 /// Zusammenfassung für Class1.
 /// </summary>
 class SMUE
 {
		private struct Adresse
		{
			string Strasse;
			private struct Haus
			{
				int Nummer;
				int Stiege;
			}
			Haus H;
		}
		/// <summary>
  /// Der Haupteinstiegspunkt für die Anwendung.
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
   Adresse[] ad = new Adresse[5];
   try
   {
	Console.Write("Bitte Strasse eingeben: ");
	ad[4].Strasse = Console.ReadLine();
   }
   catch
   {
	MessageBox.Show("Fehler");
   }
  }
 }
}
 
Jetzt macht der Compiler aber Streß wegen dem -> Anhang

Ich mein, MessageBox ist doch richtig, und was meint der mit Sicherheitsebene?
 

Anhänge

  • fehler.jpg
    fehler.jpg
    53 KB · Aufrufe: 58
Ich hatte den Code nicht getestet.

Da Messagebox nicht im namespace System zu finden ist mekert er rum. Entweder du gibst ganz oben "using System.Windows.Forms;" ein oder du ersetzt die Zeile mit "System.Windows.Forms.MessageBox.Show("Fehler");"

einmal ersetz du es Direkt und einmal werden die Methode, constanten usw. in den lokal namespace genommen damit du nicht soviel schreiben musst. Das kann aber auch nachteile haben.
 
Bei "using System.Windows.Forms;" unterstreicht mir de Compiler dass Wort "Windows".

"Der Typ oder Namespacename "Windows" ist in der Klasse oder dem Namespace "System" nicht vorhanden (fehlt ein Assemblyverweis?)"
 
Achja genau so ist es.
Klicke im "Projekt Explorer" auf Referenzen und da auf "Referenzen Hinzufügen" dort musst du die System.Windows.Forms.dll hinzufügen.
 
...aber ganz ehrlich... was will man bei einem Consolen-Programm mit einem Fehler Handling, dass per MessageBox ausgegeben wird?

Ich würde anstelle von:
Code:
MessageBox.Show("Fehler");
eher
Code:
Console.WriteLine("Fehler");
schreiben.

/edit: Dafür hat der ne 1 bekommen? *kopfschüttel*
 
ich bin jetzt nicht der Oberpro, aber muss man nicht bei "catch" immer auch noch mindestens (Exception) dahinterschreiben? also

Code:
try
{
//blabla
}
catch(Exception)
{
//blabal
}

oder

Code:
try
{
//blabla
}
catch(Exception a)
{
MessageBox.show(a);
}
 
Nein, muss man nicht. Ohne angabe wird der block bei jeder exception ausgeführt, außer zuvor wurde ein passender block für die exception geschrieben, da ja mehrere catch möglich sind. bzw sagen wir mal so das catch ist dann ein finaly.
 
Trivalik hat gesagt.:
Nein, muss man nicht. Ohne angabe wird der block bei jeder exception ausgeführt, außer zuvor wurde ein passender block für die exception geschrieben, da ja mehrere catch möglich sind. bzw sagen wir mal so das catch ist dann ein finaly.

Falsch.

Bei einem Try-Catch Konstrukt wird 'finaly' immer aufgerufen, auch wenn keine Exception aufgetretten ist.
 
Zurück