Struct aus meiner main.cpp in Class verwenden



  • Hallo,

    ist es möglich ein definierte Struct in meiner Klasse zu verwenden.
    Die Struct ist in meine main.cpp und ich möchte mit ihr auch gerne in meiner Klasse.h damit arbeiten.

    ist das möglich?

    danke



  • Ja, Du definierst dein struct in einer anderen Datei struct.h, die du in Klasse.h und main.cpp inkludieren kannst.



  • danke schon mal.

    meine codes sehen so aus:
    main.cpp:

    #include "stdafx.h"
    #include "main.h"
    #include "MqlStr.h"
    #include "Orders.h"
    
    #include <string>
    #include <cstring>
    #include <mysql++.h>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    #define WIN32_LEAN_AND_MEAN
    #define MT4_EXPFUNC __declspec(dllexport)
    
    MT4_EXPFUNC void __stdcall DLL_Init()
    {
    }
    
    MT4_EXPFUNC void __stdcall DLL_OrdersSync(MqlStr Input[][11][2])
    {
        Orders orders (&Input);
    }
    

    Orders.h:

    #include "MqlStr.h"
    
    class Orders {
      public:
    	  Orders(MqlStr);
      private:
    };
    

    MqlStr.h:

    struct MqlStr;
    
    struct MqlStr {
        int len;
        char* string;
    };
    

    Leider bekomm ich immer folgende Fehlermeldung:

    1>c:\users\thomas plank\documents\visual studio 2008\projects\test\test\MqlStr.h(3) : error C2011: 'MqlStr': 'struct' Typneudefinition
    1>        c:\users\thomas plank\documents\visual studio 2008\projects\test\test\MqlStr.h(3): Siehe Deklaration von 'MqlStr'
    

    Woran liegt das?

    Danke


  • Mod



  • #include "MqlStr.h"
    #include "Orders.h"
    

    An dieser Stelle wird in die main.cpp Datei einfach der Inhalt der anderen reinkopiert. Das heißt da steht:

    struct MqlStr;
    
    struct MqlStr {
        int len;
        char* string;
    };
    // hier beginnt Orders.h, hier stand nochmal #include "MqlStr.h"
    struct MqlStr;
    
    struct MqlStr {
        int len;
        char* string;
    };
    
    class Orders {
      public:
          Orders(MqlStr);
      private:
    };
    

    Wie Du siehst wurde MqlStr zweimal definiert und das ist nicht erlaubt.
    Man behilft sich d mit den sog. Include Guards, die verhindert, dass eine Datei mehrfach inkludiert wird.

    #ifndef MQLSTR_H  // <- Beim zweiten mal ist MQLSTR_H definiert und die Datei ist "leer"
    #define MQLSTR_H
    
    struct MqlStr;
    
    struct MqlStr {
        int len;
        char* string;
    };
    
    #endif
    

    Diese Includeguards schreibt man in jede Headerdatei




Anmelden zum Antworten