Die Methode der Klasse 1 muss in der Methode der Klasse 2 aufgerufen werden.



  • Ich stehe grade so ein bisschen auf dem Schlauch.
    Ich muss ein AddIn programmieren und mich dabei an einer gewissen Syntax halten.

    Jetzt habe ich 2 Klassen

    class CTester : public AW::ASafetyTester
    {
        DEC_CUSTOM_ADDIN_CLASS_DEFAULT( CTester, AW::ASafetyTester )
    
    private:
        int  mSetupTime;
        bool mPowerOn;
    public:
                ADDIN_CALL  CTester( CModule * iOwner );
        virtual ADDIN_CALL ~CTester();
        //.......................................................................
        virtual const char * ADDIN_CALL GetCaption              () const;
        virtual const char * ADDIN_CALL GetVersionText          () const;
       	virtual bool         ADDIN_CALL GetTesterInfo   		( AW::CTesterInfo & oInfo ) const;
        //.......................................................................
        virtual bool         ADDIN_CALL ExecuteMultimeterDialog ();
        virtual void         ADDIN_CALL SetDeviceInfo           ( const AW::CDeviceInfo * iInfo );
        virtual bool         ADDIN_CALL IsFunctionAvailable     ( const char * iFuncName );
        virtual bool         ADDIN_CALL Measure                 ( const char * iFuncName, const AW::CValues & iParams, AW::CResults & oResults, AW::CEvalItems * ioEvalItems );
                bool         ADDIN_CALL DoMeasure               ( const char * iFuncName, int iDuration , AW::CResults & oResults );
        //.......................................................................
        virtual bool         ADDIN_CALL IsSequenceSupported     ( const char *  iFuncName, const AW::CValues & iParams );
        virtual bool         ADDIN_CALL MeasureSequence         ( const char ** iFuncNames, uint iCount, const AW::CValues & iParams, AW::CResults & oResults, AW::CEvalItems * iEvalItems );
        //.......................................................................
        virtual bool         ADDIN_CALL SetPCMode               ( bool iPCMode );
        virtual void         ADDIN_CALL OnBegin                 ();
        virtual void         ADDIN_CALL OnEnd                   ();
        virtual void         ADDIN_CALL OnStart                 ();
        virtual void         ADDIN_CALL OnStop                  ();
        virtual void         ADDIN_CALL OnLimitError            ();
        virtual void         ADDIN_CALL Complete                ( AW::EPowerMode iPowerMode );
        //.......................................................................
        virtual bool         ADDIN_CALL IsPowerOnOffAvailable   () const;
        virtual bool         ADDIN_CALL IsPowerOn               () const;
        virtual bool         ADDIN_CALL Power                   ( bool iPowerOn );
    };
    

    und

    class MyCommandReceiver : public AW::ACommandReceiver
    {
        typedef AW::ACommandReceiver super;
    
    private:
        AW::CMenuItem * mMenuItems   [ 1 ];
        AW::CMenuItem * mSubMenuItems[ 1 ];
    
    public:
        ADDIN_CALL  MyCommandReceiver();
        ADDIN_CALL ~MyCommandReceiver();
    
                void ADDIN_CALL InitMenus       ();
        virtual void ADDIN_CALL DoCommand       ( int iCommand );
    private:
                void ADDIN_CALL SetHints        ();
    };
    

    In der Methode MyCommandReceiver::DoCommand muss jetzt die Methode CTester::Measure aufgerufen werden.

    void ADDIN_CALL MyCommandReceiver::DoCommand( int iCommand )
    {
        const char       * iFuncName = "M 001";
        const AW::CValues  iParams;
        AW::CResults       oResults;
        AW::CEvalItems     ioEvalItems;
        if ( iCommand == kStartSubMenuCommand_AddIn_1 )
        {
          ST::CTester::Measure(iFuncName,iParams,oResults,ioEvalItems);
        }
    }
    

    Dieses gibt eine Fehlermeldung

    [C++ Error] MY_CommandReceiver.cpp(72): E2283 Use . or -> to call '__stdcall ST::CTester::Measure(const char *,const AW::CValues &,AW::CResults &,AW::CEvalItems *)'
    [C++ Warning] MY_CommandReceiver.cpp(74): W8004 'iFuncName' is assigned a value that is never used
    

    Wenn ich jetzt umänder in

    ST::CTester->Measure(iFuncName,iParams,oResults,ioEvalItems);
    

    kommt die Fehlermeldung

    [C++ Error] MY_CommandReceiver.cpp(72): E2108 Improper use of typedef 'ST::CTester'
    [C++ Warning] MY_CommandReceiver.cpp(74): W8004 'iFuncName' is assigned a value that is never used
    

    Ich muss dazu sagen, dass mir diese Form von Methodenaufruf mit '::' völlig unbekannt ist und ich bisher immer '->' oder '.' genutzt habe.

    Hat jemand eine Idee?



  • Wenn ich das richtig überflogen habe, dann fehlt dir das CTester Objekt. So wie du die Methode jetzt aufrufst müsste sie eine Klassenmethode also static sein. Irgendwo ist also ein Denkfehler drin.



  • rdr_test_5;30;60



  • Sofern CTester kein namespace ist (was es offensichtlich nicht ist) und MyCommandReceiver nicht in irgendeiner Form von CTester erbt, dann brauchst du da eine statische Funktion, da dem Compiler nicht klar sein kann, welches Objekt CTester du meinst. (Bei static, oder im Falle eines Namespaces wäre es ja eindeutig)



  • drakon schrieb:

    ...

    Der Thread ist 2 Monate alt. Du bist Opfer eines Spammbots geworden.



  • Momentan ist es gerade wieder schlimm; sehr viele Threads vom September wurden wieder von Spambots hervorgeholt...



  • Tachyon schrieb:

    drakon schrieb:

    ...

    Der Thread ist 2 Monate alt. Du bist Opfer eines Spammbots geworden.

    Mist.. -.-
    Der hat so frisch ausgesehen. 🙂


Anmelden zum Antworten