C++ undefined reference



  • class DCF77 {
    private:
    
        //Private variables
        bool _initialized;  
    
        static int dCF77Pin;
        static int dCFinterrupt;
        static byte pulseStart;
    	static volatile bool TestToggle;
    
        // DCF77 and internal timestamps
        static time_t previousUpdatedTime;
        static time_t latestupdatedTime;            
        static  time_t processingTimestamp;
        static  time_t previousProcessingTimestamp;     
        static unsigned char CEST;
        // DCF time format structure
        struct DCF77Buffer {
          //unsigned long long prefix       :21;
          unsigned long long prefix     :17;
          unsigned long long CEST       :1; // CEST 
          unsigned long long CET        :1; // CET 
          unsigned long long unused     :2; // unused bits
          unsigned long long Min        :7; // minutes
          unsigned long long P1         :1; // parity minutes
          unsigned long long Hour       :6; // hours
          unsigned long long P2         :1; // parity hours
          unsigned long long Day        :6; // day
          unsigned long long Weekday    :3; // day of week
          unsigned long long Month      :5; // month
          unsigned long long Year       :8; // year (5 -> 2005)
          unsigned long long P3         :1; // parity
        };
    
        // DCF Parity format structure
        struct ParityFlags{
            unsigned char parityFlag    :1;
            unsigned char parityMin     :1;
            unsigned char parityHour    :1;
            unsigned char parityDate    :1;
        } static flags;
    
        // Parameters shared between interupt loop and main loop
    
        static volatile bool FilledBufferAvailable;
        static volatile unsigned long long filledBuffer;
        static volatile time_t filledTimestamp;
    
        // DCF Buffers and indicators
        static int  bufferPosition;
        static unsigned long long runningBuffer;
        static unsigned long long processingBuffer;
    
        // Pulse flanks
        static   int  leadingEdge;
        static   int  trailingEdge;
        static   int  PreviousLeadingEdge;
        static   bool Up;
        static   bool Test;
    
        //Private functions
        void static initialize(void);
        void static bufferinit(void);
        void static finalizeBuffer(void);
        static bool receivedTimeUpdate(void);
        void static storePreviousTime(void);
        void static calculateBufferParities(void);
        bool static processBuffer(void);
        void static appendSignal(unsigned char signal);
    
    public: 
        // Public Functions
    	//static  int Test;
        DCF77(int DCF77Pin, int DCFinterrupt, bool OnRisingFlank=true); 
    
        static time_t getTime(void);
        static time_t getUTCTime(void);
        static void Start(void);
        static void Stop(void);
        static void int0handler();
    
     };
    
    void DCF77::initialize(void) 
    {	
    	leadingEdge           = 0;
    	trailingEdge          = 0;
    	PreviousLeadingEdge   = 0;
    	Up                    = false;
    	Test                  = false;
    
    	runningBuffer		  = 0;
    	FilledBufferAvailable = false;
    	bufferPosition        = 0;
    	flags.parityDate      = 0;
    	flags.parityFlag      = 0;
    	flags.parityHour      = 0;
    	flags.parityMin       = 0;
    	CEST				  = 0;
    	}
    

    Hallo ich habe da eine C++ Lib welche ich um die Variable Test erweitern möchte.
    Eigentlich keine große Sache !!! Nur dummerweise bekomme ich vom Compiler

    C:\Users\ats37\AppData\Local\Temp\build931a4349f13bf1ae47b203afdc2fcf92.tmp\libraries\DCF77\DCF77.cpp.o: In function `DCF77::initialize()':

    D:\__Dokus\Documents\Arduino\libraries\DCF77/DCF77.cpp:67: undefined reference to `DCF77::Test'

    collect2.exe: error: ld returned 1 exit status

    zu hören. Eigentlich ist Test genauso wie Up deklariert!



  • ats3788 schrieb:

    Eigentlich ist Test genauso wie Up deklariert!

    Es muss aber auch irgendwo definiert werden.



  • Danke für die Antwort
    Was meint Du mit definiert werden, wo ist Up definiert ?



  • Hast du mal in den Dateien nach Up gesucht?



  • ats3788 schrieb:

    Danke für die Antwort
    Was meint Du mit definiert werden, wo ist Up definiert ?

    Sehr wahrscheinlich nicht in einer Header-Datei, sondern in einer cpp - Datei.



  • Mal ne ganz generelle Frage: warum gibt es in der Klasse so viele statische Variablen? Ich kann mir nicht vorstellen, dass dies ein sinnvolles Klassendesign ist.



  • ersl mal danke für die Antworten
    Ich habe das hier gepostet weil ihr in der rEGEL RICHTIG FÄHIG SEIT 😉
    das ist für ardunio's
    http://thijs.elenbaas.net/downloads/?did=1
    warum DAS SO DEKLARIERT IST keine Ahnung ich komme aus der Pascal Welt
    Ich wollte nur wissen ob mein bool Test Sinn macht oder nicht Ich wollte mich von C nach C++ bewegen und habe das mit C++ Seattle
    nachgebildet und keinen Fehler erhalten aber mit dem Arduino Compiler habe ich das Problem und ich weiß nicht was ich falsch mache. Wenn das so konform
    ist auch gut dann muß ich ein Case im Arduino Forum aufmachen.
    C C++ ist eben nun mal State of the Art für µMCU's



  • ats3788 schrieb:

    ich weiß nicht was ich falsch mache.

    Statische Klassenvariablen müssen außerhalb der Klassendeklaration definiert werden. Für Up zum Beispiel muss es in irgendeiner Deiner Quelldateien auch eine Definition geben. Durchsuch Deine Quelldateien mal nach

    DCF77::Up
    

Anmelden zum Antworten