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(); }; #endifdann 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_