Dev-C++ 4.9.9.0 kann Headerfile nicht finden, obwohl sie existiert...?



  • Hallo, wie oben schon steht, verwende ich den Dev-C++ Compiler. Ich habe eine eigene Headerfile geschrieben und dazu eine Unit, wie das ja üblich ist. Folgende Dateien:

    \classes\user.h
    \classes\user.cpp
    \main.cpp

    von der main.cpp will ich nun die user.h einbinden. das geschieht folgendermaßen:

    #include "classes/user.h"
    

    Doch der Compiler meldet folgendes:

    3 E:\Programme\C++ Club\adr\main.cpp In file included from main.cpp
    

    Was heißt das? In der Hilfe finde ich nichts dazu... was mache ich falsch?

    Hier mal der Inhalt der Headerdatei:

    #include <vector>
    
    #ifndef userH
    #define userH
    
    #define urOpen 1
    #define urRead 2
    #define urWrite 4
    
    class UserRights
    {
        private:
            short _rights;
        public:
            UserRights();
            ~UserRights();
            short Rights();
            bool Add(short r);
            bool Delete(short r);
            bool Contains(short r);
            void Assign(UserRights* r);
    };
    class User
    {
        private:
            char* _name;
            char* _pass;
            UserRights* _rights;
        public:
            char* Name();
            char* Password();
            UserRights* Rights();
            User(char* n,char* p,UserRights* r);
            ~User();
            bool Save(char* f);
            bool Load(char* f);
            bool Like(User* u);
            void Assign(User* u);
    };
    class UserList
    {
        private:
            vector<User*>_users;
        public:
            UserList();
            ~UserList();
            bool Add(User* u);
            bool Delete(User* u);
            bool Delete(int idx);
            bool Insert(int idx,User* u);
            bool Contains(User* u);
            int Find(User* u);
            int Find(char* n=0,char* p=0);
            int Count();
            void Sort();
            User* operator[](int idx);
    };
    #endif
    

    Und die Unit (user.cpp):

    #pragma hdrstop
    #include "user.h"
    #pragma package(smart_init)
    
    // Constructor of UserRights - sets rights to urOpen
    UserRights::UserRights()
    {
        _rights=urOpen;
    }
    
    // Destructor of UserRights
    UserRights::~UserRights()
    {
        _rights.~short();
    }
    
    // Get the rights ;)
    short UserRights::Rights()
    {
        return _rights;
    }
    
    // Add a right to userrights
    bool UserRights::Add(short r)
    {
        if(_rights|r)
            return false;
        else if(r==urOpen || r==urRead || r==urWrite)
        {
            _rights+=r;
            return true;
        }
        return false;
    }
    
    // Delete a right of userrights
    bool UserRights::Delete(short r)
    {
        if(_rights|r)
        {
            _rights-=r;
            return true;
        }
        return false;
    }
    
    // Contains userrights a right?
    bool UserRights::Contains(short r)
    {
        return _rights|r;
    }
    
    // Assigning userrights
    void UserRights::Assign(UserRights* r)
    {
        _rights=r->Rights();
    }
    
    // Constructor of User
    User::User(char* n,char* p,UserRights* r)
    {
        _name=n;
        _pass=p;
        _rights=new UserRights();
        if(r!=0)
            _rights->Assign(r);
    }
    
    // Destructor of Users
    User::~User()
    {
        delete[] _name;
        delete[] _pass;
        delete _rights;
    }
    
    // Getting data of user
    char* User::Name()
    {
        return _name;
    }
    char* User::Password()
    {
        return _pass;
    }
    UserRights* User::Rights()
    {
        return _rights;
    }
    
    // Is that the same user?
    bool User::Like(User* u)
    {
        return (_name==u->Name() && _pass==u->Password());
    }
    
    // Load user from a file
    bool User::Load(char* f)
    {
        FILE* h=fopen(f,"r");
        fread(_name,64,1,h);
        fread(_pass,32,1,h);
        fclose(h);
        delete h;
    }
    
    // Save user to a file
    bool User::Save(char* f)
    {
        FILE* h=fopen(f,"w");
        fwrite(_name,64,1,h);
        fwrite(_pass,32,1,h);
        fclose(h);
        delete h;
    }
    
    // Assign data of another user
    void User::Assign(User* u)
    {
        _name=u->Name();
        _pass=u->Password();
        _rights->Assign(u->Rights());
    }
    
    // Empty constructor of userlist
    UserList::UserList()
    {
    }
    
    // Destructor of userlist
    UserList::~UserList()
    {
        for(int i=0;i<_users.size();++i)
            delete _users[i];
        _users.resize(0);
    }
    
    // Add a user to list
    bool UserList::Add(User* u)
    {
        _users.resize(_users.size()+1);
        Insert(_users.size()-1,u);
    }
    
    // Insert a user into the list
    bool UserList::Insert(int idx,User* u)
    {
        _users.insert(idx,u);
    }
    
    // Delete a user of list
    bool UserList::Delete(User* u)
    {
        int idx=Find(u);
        if(idx>-1)
            return Delete(idx);
        return false;
    }
    bool UserList::Delete(int idx)
    {
        for(int i=idx;i<_users.size()-1;++i)
            _users[i]->Assign(_users[i+1]);
        delete _users[_users.size()-1];
        _users.resize(_users.size()-1);
    }
    
    // Find a user
    int UserList::Find(User* u)
    {
        for(int i=0;i<_users.size();++i)
            if(_users[i]==u)
                    return i;
        return -1;
    }
    int UserList::Find(char* n,char* p)
    {
        User* u=new User(n,p,new UserRights());
        int idx=Find(u);
        delete u;
        return idx;
    }
    
    // Count users of list
    int UserList::Count()
    {
        return _users.size();
    }
    
    // Is user in list?
    bool UserList::Contains(User* u)
    {
        for(int i=0;i<_users.size();++i)
            if(_users[i]->Like(u))
                return true;
        return false;
    }
    
    // Sort userlist
    void UserList::Sort()
    {
        for(int i=0;i<_users.size();++i)
        {
            for(int j=i;j<_users.size();++j)
            {
                if(_users[i]->Name()<_users[j]->Name())
                {
                    User* u=new User(_users[i]->Name(),
                                    _users[i]->Password(),
                                    _users[i]->Rights());
                    _users[i]->Assign(_users[j]);
                    _users[j]->Assign(u);
                    delete u;
                }
            }
        }
    }
    
    // Index-Operator of list
    User* UserList::operator[](int idx)
    {
        return _users[idx];
    }
    

    Und die Main:

    #include <iostream>
    #include <stdlib.h>
    #include "classes/user.h"
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        system("PAUSE");	
        return 0;
    }
    

    Falls das weiterhilft ^^

    - Windoof



  • Versuchs mal so:
    #ifndef __BLA_H
    #define __BLA_H
    #endif

    BLA steht für den Headernamen.



  • Nein, das hat leider auch nicht geklappt...



  • *omg* Sorry, ich hielt diese Zeile als eine Fehlermeldung, dabei ist es nur iene Beschreibung für die nächste Zeile... da ist nämlich noch ein Fehler:

    43 E:\Programme\C++ Club\adr\classes\user.h 'vector' is used as a type, but is not defined as a  type.
    

    Die Zeile sieht wie folgt aus:

    vector<User*>_users;
    

    Sie ist in der Klasse UserList zu finden (unter private-Section). Was ist daran jetzt falsch?



  • Alle STL Klassen liegen im std Namensraum. Folgendes sollte also den fehler beheben

    std::vector<User*> _users;
    


  • Ja, das war's, danke dir.



  • OK, nun habe ich versucht ein Objekt der Klasse User zu erstellen und alle Daten auszugeben, nun bekomme ich mehrere Meldung folgenden Typs:

    [Linker error] undefined reference to `UserRights::UserRights()'
    

    Was ist nu schonwieder falsch? - Hab doch die Funktionen deklariert und definiert... langsam verzweifle ich... im BCB geht's einwandfrei... bis auf einige Kleinigkeiten



  • Guten Tag, du hast sehr wahrscheinlich vergessen, die Datei \classes\user.cpp
    mitzukompilieren. Übrigens verstehe ich die Prgmas nicht. Sind das vielleicht VC++-Pragmas ? Dev-C++/mingw versteht diese nicht. Frohes Neues Jahr! Dev-C++-User



  • Nein, das wurde von Dev-C++ 4.9.9.0 so generiert möchte ich meinen... oder hab ich das versehentlich vom BCB übernommen...? hmm... gut möglich, ich probier's mal ohne... und wiesoll ich sie mitcompilieren...? Ich hab die headerdatei eingebunden per include... sucht er dann nicht automatisch nach der unit...?



  • OK, alles klar, hat funktioniert. Danke Leute.


Anmelden zum Antworten