Zeiger auf Objekt an Funktion übergeben



  • Hallo zusammen

    folgendes Problem, ich baue mein Programm(Konsolenanwendung) auf Modulen auf, so habe ich ein Modul gemacht, um einen PA zu erstellen. dessen Header lautet:

    #ifndef MODULNEWPA_H
    #define MODULNEWPA_H
    #include "MyHerdanlage.h"
    
    void newPA(MyHerdanlage* PAaktiv);
    
    #endif
    

    funktioniert bisweilen alles tadellos.
    erstelle ich nun ein zweites Modul mit einer andern Funktion, dessen Header folgendermassen lautet:

    #ifndef MODUL_TEST_H
    #define MODUL_TEST_H
    #include "MyHerdanlage.h"
    
    void testing(MyHerdanlage* PAaktiv);
    
    #endif
    

    entsteht beim compilieren folgende Fehlermeldung:

    Fehler: ModulTest.h(5,26):'MyHerdanlage' cannot start a parameter declaration

    Die Klasse MyHerdanlage:

    #ifndef MYHERDANLAGE_H // Wächter
    #define MYHERDANLAGE_H
    
    #include "MyClasses.h"
    #include "MyGrill.h"
    
    class MyHerdanlage : public MyGeraet{
    private:
    	int nInduktionsfuss;
    	MyInduktionsfuss* Induktionsfuss;
    	int nGrill;
    	MyGrill* Grill;
    public:
    	MyHerdanlage();
    	MyHerdanlage(char PA[]);
    	MyHerdanlage(int nindukt, int ngrill);
    
    	void setnIduktionsfuss(int nindukt);
    	int getnInduktionsfuss();
    	void setnGrill(int ngrill);
    	int getnGrill();
    
    	~MyHerdanlage();
    };
    
    #endif
    

    die in der Klasse MyHerdanlage benutzten Klassen(auch diese besitzen Wächter, habe sie aber in diesem Post weggelassen):

    class MyInduktionsfuss : public MyBaugruppe{
    private:
    	MyInduktionsmodul Induktionsmodul;
    	MySpule Spule;
    	int Belegung;
    public:
    	MyInduktionsfuss();
    	MyInduktionsfuss(char art[],char bez[], char PA[], int i, bool test);
    	void setBelegung(int Bel);
    	int getBelegung();
    };
    
    class MyGrill : public MyGeraet{
    private:
    	float Temperatur;
    public:
    	MyGrill();
    	MyGrill(char art[],char bez[], char PA[], int i, bool test);
      void setTemperatur(float Temp);
      float getTemp();
    };
    

    und

    class MyGeraet : public MyBaugruppe{
    protected:
    	double U[6];//12,23,31,1n,2n,3n
    	double I[6];//12,23,31,1n,2n,3n
    	double P[7];//12,23,31,1n,2n,3n,
    	bool net;// true = PP // false = PN
    public:
    	MyGeraet();
    	MyGeraet(char art[], char bez[], char PA[], int i, bool test);
    
    	void setU(double messwert, int i);
    	void setI(double messwert, int i);
    	void setP(double messwert, int i);
    	double getU(int i);
    	double getI(int i);
    	double getP(int i);
    	double getPsum(bool net);
    };
    

    ->

    class MyBaugruppe{
    protected:
    	char ArtNr[8];
    	char Bezeichnung[20];
    	char PANr[8];
    	char BuiltIn[8];// zuweisung zu Herdanlage
    	int index;
    	bool tested;
    public:
    	MyBaugruppe();	
    	MyBaugruppe(char art[],char bez[],char PA[], int i, bool test);
    
    	void setArtNr(char art[]);
    	char* getArtNr();
    	void setBezeichnung(char bez[]);
    	char* getBezeichnung();
    	void setPANr(char PA[]);
    	char* getPANr();
    	void setBuiltIn(char built[]);
    	char* getBuiltIn();
    	void setindex(int i);
    	int getindex();
    };
    

    ich benutze Borland C++5.02 unter Windows Vista

    für eine Hilfe wäre ich euch dankbar.

    GreatWho



  • Da beide header semantisch identisch sind muss der Fehler wohl an der Stelle sein wo du sie einbindest. Zeig doch mal bitte deine main bzw. die .cpp wo modulnewpa.h (?) und modultest.h eingebunden werden.



  • relevanter Auszug aus der main.cpp:

    #include "standart.h" // Sammelheader für header mit Funktionsdefinitionen
    #include "MyClasses.h" // Sammelheader für die Klassen
    
    char mainmenu(MyHerdanlage* PAaktiv);
    
    int main(){
    
    _setcursortype(_NOCURSOR);
    char wahl;
    MyHerdanlage* PAaktiv= new MyHerdanlage;
    do{
    
    	wahl = mainmenu(PAaktiv);
    	switch (wahl){
    		case '1'	: newPA(PAaktiv);// Aufruf (ModulnewPA.h)
                    break;
    		case '2'	: testing(PAaktiv);// Aufruf (Modultest.h)
          					break;
    		case '3'	: clrscr();
    ...
    }
    

    Sammelheader:

    // StandartBibliotheken
    #include <iostream.h>
    #include <conio.h>
    #include <iomanip.h>
    #include <dos.h>
    #include <time.h>
    #include <fstream.h>
    #include <stdlib.h>
    
    // eigene Bibliotheken
    #include "Neunteufel.h"
    #include "hinti.h"
    
    // Module
    #include "ModulNewPA.h"
    #include "ModulTest.h"
    


  • OK...
    Dummer Fehler....

    habe für den Sammelheader keinen Wächter wegen doppelter Deklarationen eingebaut.... man, hab ich da lange rumgesucht, und jetzt komm ich selber drauf...

    aber Danke für die versuchte Hilfeleistung.

    ist somit erledigt.

    GreatWho


Anmelden zum Antworten