Klassen-Problem



  • Hmm entweder steh ich grad auf der Leitung oder...

    also ich hab folgende Klasse Quest:

    #ifndef QUEST
    #define QUEST
    
    struct question{
    	std::string quest;
    	std::string answer;
    	};
    
    class Quest 
    {
    public: 
    
    private:
    	std::vector<question> quest_vec;
    	std::vector<int> used;
    	int a_right, a_wrong;
    
    	int GetRowCount();
    	question ParseLine(std::string);
    	void InitRandom();
    	int GetRand();
    	bool WasUsed(int qnumber);
    	question DeliverQuestion();
    	void showstatus();
    };
    
    #endif
    

    dann hab ich logischer Weise ein .cpp File in dem ich quest.h include (#include "quest.h"), beim kompillieren kommt dann aber in der quest.cpp: fatal error C1010: unexpected end of file while looking for precompiled header directive

    wenn ich auch stdafx.h include, in der ich die ganzen anderen benötigten Header <string> usw hab, fällt der Fehler zwar weg, dafür wird in quest.cpp die Klasse Quest nicht gefunden(error C2653: 'Quest' : is not a class or namespace name, usw usw)

    was mach ich falsch? 😞

    beginner_



  • Klingt ganz so als hättest du irgendwo einen geschleifte Klammer zu viel bzw. zu wenig in deinem Cpp-File



  • hmm hab alles durch gesucht , find aber keinen Fehler

    ich post einfach mal den code...

    #include "quest.h"
    
    int Quest::GetRand()   //liefert Zahl für Frage zurück
    {
    	int max(quest_vec.size()), min(0);
    	return (( rand() % ( max - min + 1 ) ) + min);
    }
    
    int Quest::GetRowCount()  //liefert Zeilenanzahl für diverse Funktionen
    {	
    	ifstream FileIn("questions.qaa");
    	int rows=0;
    	if (FileIn)   
    	{
        for(string ReadString; getline(FileIn, ReadString); ++rows);        
    	};
    	return rows;
    }
    
    question Quest::ParseLine(string line)  //wertet eine Zeile aus und gibt Frage zurück
    {
    	basic_string <char>::size_type index;
    	index=line.find("|");
    	question temp;
    	temp.question=line.substr(0, index);
    	temp.answer=line.substr(index+1, (line.length()-(temp.quest.length()+1)));
    	return temp;
    }
    
    vector<question> Quest::ParseAll()  //ließt Datei ein und gibt vector zurück
    {
    	vector<string> data;
    	vector<question> questvec;
    	vector<string>::iterator data_it;
    	data_it=data.begin();
    
    	ifstream FileIn("questions.qaa");
    
    	if (FileIn)   
    	{
        for (string ReadString; getline(FileIn, ReadString);)
    	{ data.push_back(ReadString); ::quest_vec.push_back(ParseLine(*data_it); ++data_it; };
    	};
    	return questvec;
    }
    
    bool Quest::WasUsed(int qnumber)  //überprüft ob Frage schon gefragt wurde
    {
    	bool isused=false;
    	vector<int>::iterator readused;
    	for(readused=used.begin(); readused!=used.end(); ++readused)
    	{ if(readused==qnumber)isused=true; };
    	return isused;
    }
    
    question Quest::DeliverQuestion()    //gibt noch nicht benutzte Frage zurück
    {
    	int randquest=GetRand();
    	while(WasUsed(randquest)==true) { randquest=GetRand(); };
    	question temp=quest_vec.at( randquest);
    	return temp;
    }
    
    void Quest::ShowStatus()
    {
    	cout<<"richtig: "<<a_right<<"\n";
    	cout<<"falsch: "<<a_wrong<<"\n";
    }
    
    void Quest::AskIt()
    {
    	question temp=DeliverQuestion();
    	string answer;
    	cout<<temp.question<<"\n";
    	getline(cout, answer);
    	if(answer==temp.answer)
    		{ ++a_right; cout<<"Sehr gut!\n"; };
    	else
    		{ ++a_wrong; cout<<"Leider falsch!\n"; };
    	cout<<"Sie haben jetzt "<<a_right<<" Fragen richtig, und "<<a_wrong<<" Fragen falsch beantwortet.\n"
    }
    

    thx schon mal^^

    beginner_



  • MSVC 6.0 als Compiler ?

    Dann sollte in die CPP noch oben als erstes #include "stdafx.h"



  • ja das hab ich ja wie schon oben geschrieben versucht,

    wenn ich auch stdafx.h include, in der ich die ganzen anderen benötigten Header <string> usw hab, fällt der Fehler zwar weg, dafür wird in quest.cpp die Klasse Quest nicht gefunden(error C2653: 'Quest' : is not a class or namespace name, usw usw)

    beginner_



  • Die Reihenfolge der Includedirektiven ist wichtig. Die Direktive für die vorkompilierten Header muss die erste sein.



  • jop das wars,

    thx

    beginner_


Anmelden zum Antworten