Problem mit Namespaces



  • Hallo,
    mein Problem sieht folgendermaßen aus:

    Mein Projekt besteht zum jetzigen Zeitpunkt aus einem Namespace:
    - MFSim
    Dieser enthält die Klassen
    - Submodel
    - Interface
    - Worksheet
    die in eigenen Dateien stecken.
    wie kann ich jetzt in der Methode Interface.PaintArea() eine Variable vom Typ Worksheet^ erzeugen? Da sich beides im selben Namespace befindet sollte das doch gehen ohne daß ich noch etwas einbinde?
    Der Compiler liefert mir aber die Fehlermeldung:
    "error C2061: syntax error : identifier 'Worksheet'"
    Wenn ich es mit MFSim::Worksheet^ versuche sagt er:
    "error C2039: 'Worksheet' : is not a member of 'MFSim'"
    Ratlos und fragend,
    Matthias



  • Zeig mal code vielleicht kann ich dir dann helfen.



  • Ach und guck mal ob du richtig inkludiert hast



  • Da die Klassen im selben Namespace stehen dachte ich ich muß nichts inkludieren. Hier mal der Code:

    Klasse DesignForm:

    #pragma once
    
    namespace MFSim {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	public ref class DesignForm : public System::Windows::Forms::Form
    	{
    	public:
    		DesignForm(void)
    		{
    			InitializeComponent();
       .
       .
       .
    

    Klasse Worksheet

    #pragma once
    
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    
    namespace MFSim
    {
    
    public ref class Worksheet : public System::Windows::Forms::PictureBox
    {
    public:
    
    	ArrayList^ mSubmodels;
    
    	Worksheet()
    	{
       .
       .
       .
    

    Klasse Submodel

    #pragma once
    
    using namespace System;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    
    namespace MFSim{
    
    ref class Submodel : public System::Windows::Forms::Label
    {
    #pragma region Constructors
    public:
    	Submodel()
    	{
       .
       .
       .
    

    Klasse Interface

    #pragma once
    
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Diagnostics;
    using namespace System::Drawing;
    
    namespace MFSim 
    {
    #pragma region Enums
    	enum class InterfaceType{MassFlow, Torque};
    	enum class InterfacePosition{Top, Left, Right, Bottom};
    #pragma endregion
    
    	ref class Interface
    	{
    #pragma region Constructors
    	public:
    		Interface(InterfaceType^ type, System::Drawing::Point^ point, InterfacePosition^ pos, String^ name, int posIndex)
    		{
       .
       .
       .
    		void DrawInterface(Point^ location, MFSim::Worksheet^ myWorksheet)
    		{
    			this->mRectangle->Location = *location;
    			SolidBrush^ Stift = gcnew SolidBrush(Color::Black);
    			myWorksheet->Image->FillRectangle(Stift, this->mRectangle);
    		}
       .
       .
       .
    

    Fehlermeldung:
    "error C2039: 'Worksheet' : is not a member of 'MFSim'"



  • Bei Java ist es vielleicht so, da sich der Compiler seine Klassen selber zusammensucht. Bei C++ mußt du dem Compiler schon sage, wo er was zu finden hat (d.h. du brauchst ein #include "WorkSheet.h" in der Interface-Klasse, damit der Compiler die WorkSheet-Klasse findet).



  • OK, das ist genau das was ich wissen wollte.
    Danke und bis bald,
    Matthias.


Anmelden zum Antworten