Namespace wird nicht akzeptiert



  • Hallo,

    habe nun herausgefunden, wie selber erstellte Klasen in die Form.h eingebunden werden.

    namespace Daten
    {
       ref class cData
       {
         ...
       };
    }
    

    Dann wird der Namensbereich in der Form.h eingebunden

    #pragma once
    #include "cParameter.h"
    
    namespace Datenaustausch {
    
    	using namespace VariablenDaten;
    	using namespace System;
    	using namespace System::IO;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::Collections::Generic;
    	using namespace System::Threading;					// für , oder . Variablen (Dezimal)
    	using namespace System::Globalization;				// für , oder . Variablen (Dezimal)
    	using namespace Daten;					// Hier einbinden
    

    Leider bringt mir dann der Compiler eine Fehlermeldung:´
    1>------ Erstellen gestartet: Projekt: Datenaustausch, Konfiguration: Debug Win32 ------
    1>Kompilieren...
    1>Datenaustausch.cpp

    1>c:\documents and settings\jn3985\my documents\visual studio 2008\projects\datenaustausch\datenaustausch\Form1.h(18) : error C2871: 'Daten': Es ist kein Namespace mit diesem Namen vorhanden
    1>Das Buildprotokoll wurde unter "file://c:\Documents and Settings\jn3985\My Documents\Visual Studio 2008\Projects\Datenaustausch\Datenaustausch\Debug\BuildLog.htm" gespeichert.
    1>Datenaustausch - 2 Fehler, 0 Warnung(en)
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

    Was ist falsch? Habe die Klasse auch in die stdafx.h eingebunden.



  • Hallo,

    in welcher Datei steht das?:

    namespace Daten
    {
       ref class cData
       {
         ...
       };
    }
    

    Denn es wird hier:

    #pragma once
    #include "cParameter.h"
    

    nicht eingebunden, oder doch (ist das oben in cParameter.h?)

    Habe die Klasse auch in die stdafx.h eingebunden.

    Ich sehe aber keine Verwendung von stdafx.h hier.

    MfG,

    Probe-Nutzer



  • Das oben ist die Klasse cParameter.h. DIe habe ich in der stdafx.h eingebunden.
    Der Namespace VariablenDaten{} ist auch angelegt, aber die Funktion darin ist "private"(ist in der Namespace-Übesicht vorhanden), das wird das Problem sein. Warum aber, das versteh ich nicht.
    In der stdafx.hgibt es eine Kommentierung, wo doch alle zusätzlichen H-Dateien eingestellt werden sollen. Deshalb habe ich die cParameter.h dort eingestellt.



  • stdafx.h sollte nur für Header verwendet werden, die selten ändern und zur basis funktionalität gehören. Die Pre- Compiled Header sind dazu da die Kompilierzeit herunterzu bringen, was in kleinen Projekten jedoch keine Rolle spielt.

    Simon



  • So, jetzt klappts. Wenn man in einem Projekt eine Klasse anlegt und diese dann verwenden möchte, so wie in meinem Fall in der Form.h (Projekt als Windows-FOrm-Anwendung), muß imme ein "Namespace" für diese Klasse angelegt werden, damit diese Klasse auch angewendet werden kann. Der Namespacebereich muß in der Headerdatei der Klasse angelegt werden

    Ich bin folgendermaßen vorgegangen:

    Neues Projekt anlegen-> von Visual Studio installierte Vorlagen "Klassenbibliothek" verwenden, Namen und Verzeichnis eingeben. Der Projektname wird dann auch der Namespace-Name.
    Dann OK, und los gehts. Die EInträge in der .h und der .cpp in der Klassendefinition vornehmen. Siehe folgendes Muster

    // FrParameter.h
    
    #pragma once
    
    using namespace System;
    
    namespace FrParameter {
    	public ref class cFormDaten     // public einfügen, damit die Klasse auch in anderen Projekten verfügbar ist
    
             {
           	    // Code für Klasse
    	};
    
    }
    

    Das gleiche gilt für die FrParameter.cpp, in der die Funktionsbeschreibung stattfindet, falls benötigt.

    // Dies ist die Haupt-DLL.
    
    #include "stdafx.h"
    #include "FrParameter.h"
    
    using namespace System;
    
    namespace FrParameter {
    	public ref class cFormDaten
    	FrParameter::FrParameter(void)
    	{
    		// Konstruktor
    	}
    
    	// Code für die Funktionsbeschreibungen
    }
    

    Wenn das geschehen ist, muß der Code compiliert werden.
    Dann liegt in dem Verzeichnis wo das Projekt erzeugt wurde in dem Verzeichnis ..\Debug die .DLL von der erzeugten Klasse.

    Diese DLL kann jetzt über "Verweise" in Projekte eingebunden werden.
    Wird jetzt ain neues Projekt angelegt oder ien bestehendes geladen, muß in der Projektmappe das Priojekt mit der Maus mit der rechten Maustaste gekllickt werden. In der Mitte des aufpoppenden Fensters gibts "Verweise..."
    Da Drauf klicken, und dann die Schaltfläche "Neuen Verweis hinzufügen ..." klicken.
    Ein neues Fenster poppt auf, dann oben den Reiter Projekte oder Durchsuchen verwenden, damit die Klasse gesucht werden kann oder direkt angewählt werden kann. OK klicken.
    Nun sollte der Namespace schon einmal im Objektbrowser vorhanden sein.
    Dann muß der

    using namespace FrParameter;
    

    eingebunden werden. Entweder bei der CLR-ANwendung direkt vor der mai()-Routine, oder bei der Windows-FOrm Anwendung bei den anderen Namespaces dazu gesellen.

    Dann sollte es funktionieren.

    Noch was, diese Anleitung steht in dem Buch "Visual C++ 2008" von Markt und Technik. ich finde das Buch genial, weil es relativ simpel erklärt, wie bestimmte Sachen funktionieren, und auch einfach die Elementaren DInge wie Lesen, Schreiben von Dateien ... drin sind.
    Sollte ich was vergessen haben, kurz melden. Leiser kann man keine Bilder einfügen, sonst hätte ich noc ein paar Bilder reingedrückt, denn ein Bild sagt mehr als 1000 Worte.
    So, ich hoffe ich kann nun auch anderen mit dieser PRoblemlösung helfen, nachdem ich Tage mit diesem Kackproblem verbracht habe.

    Gruß
    Moehrle


Anmelden zum Antworten