static Funktion macht Probleme



  • Ich greife in folgendem Codeschnipselen auf einen Funktion zu, dir mir das Datum prüfen soll, ob dieses gültig ist. Die Funktion die das erledit ist static in der Klasse Date deklariert. Der Compiler wirft mir folgende, für mich unverständliche, Fehlermeldung aus:

    Mitarbeiterverwaltung.obj : error LNK2019: unresolved external symbol "public: static bool __cdecl Date::checkDate(int &,int &,int &)" (?checkDate@Date@@SA_NAAH00@Z) referenced in function "void __cdecl createMember(void)" (?createMember@@YAXXZ)
    C:\Documents and Settings\Souljumper\My Documents\Visual Studio 2005\Projects\Mitarbeiterverwaltung\Debug\Mitgliederverwaltung.exe : fatal error LNK1120: 1 unresolved externals

    Dieser Code stammt aus der createMember Funktion, die in der Fehlermeldung angesprochen wird und vermutlich das Problem darstellt.

    //Prüfen ob Date ok
    	if(!Date::checkDate(tg, mn, jr))
        {
    		while(!Date::checkDate(tg,mn,jr))
    		{
    			std::cout<<"\n\nDatum fehlerhaft, bitte gültiges Date eingeben\n";
    			std::cout<<"Geben Sie das Geburtsdatum der Person im Format TT.MM.JJ an"<<std::endl;
    			std::cin>>tg>>pkt>>mn>>pkt>>jr;
    			if(std::cin.fail())
    			{
    				std::cout<<"Abbruch durch Benutzer"<<std::endl;
    				break;
    			}
    		}
    	}
    
    	if(Date::checkDate(tg,mn,jr))
    	{
    		Member *pMitglied = new Member(vorname, nachname, tg, mn, jr);
    		member.push_back(pMitglied);
    	}
    

    Definition in Date:

    public:
        //Prüft ob das Jahr ein Schaltjahr ist
         static bool checkYear(int &);
        //Prüfen ob ein gültiges Date eingegeben wurde
        static bool checkDate(int &, int &, int &);
    

    Deklaration in Date:

    static bool checkYear(int jr)
    {
        if(jr%400 == 0 && jr %4 == 0)
        {
            return true;
        }
        else
            return false;
    }
    
    static bool checkDate(int tg, int mn, int jr)
    {
    
        if (tg < 1 || tg > 31 || mn < 1 || mn > 12 )
    	{
    		return false;
    	}
    
        switch(mn)
        {
            case 2:
    			if (checkYear(jr))
                    {
                        if (tg > 29)
                            return false;
                    }
                        else if (tg > 28)
                    {
                        return false;
                    }
                    break;
    		case 4:
    				if (tg > 30)
                        return false;
                        break;
    		case 6: 
    				if (tg > 30)
                        return false;
                        break;
    		case 9: 
    				if (tg > 30)
                        return false;
                        break;
            case 11:
                    if (tg > 30)
                        return false;
                        break;
        }
    
        return true;
    
    }
    

    Wo ist der Fehler, oder was könnte noch alles der Fehler sein?



  • - Ist das wirklich C++/CLI mit .NET? Ich gehe einfach mal davon aus, dass nicht.

    - Es müsste

    bool Date::checkYear(int jr)
    

    in der Impl heissen, sonst weiss er doch nicht welcher Klasse er die Methode zuordnen soll.

    - Bitte mach die Signaturen beider Funktionsköpfe auch identisch (aber das wird der Compiler Dir auch noch sagen 😉 )



  • Jetzt wirf er mir das hier aus:

    Date::checkYear' : 'static' should not be used on member functions defined at file scope

    bin ich echt so blind....ich seh einfach nicht was er von mir will...



  • Im Header

    class MeineKlasse{
        static bool checkDate(int &, int &, int &);
    };
    

    in der Implemenationsdatei: (⚠ KEIN ⚠ static)

    bool MeineKlasse::checkDate(int &a, int &b, int &c)
    {
       //...
    }
    


  • EDIT: Ups, schon ok, habs gesehen. Danke!


Log in to reply