私はクイズの銀行ゲームを作りたいと思っていました....私は情報を格納し、それをベクトルに戻すtxtファイルを持っていますが、私の主な問題は、オブジェクトのベクトルにこのポインタを使ってgetメソッドを出力する方法ですか? これは、ここに私のコード全体オブジェクトのベクトルの要素をどのように出力できますか?
#include <iostream>
#include <string>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
using namespace std;
class question
{
private :
string ques ;
string answer;
int point ;
public :
question(string ques = "",string answer = "",int point = 0):ques(ques),answer(answer),point(point){}
virtual string getAnswer() = 0;
virtual string getQuestion() = 0;
virtual int getPoint() = 0;
};
class SAquestion : public question
{
private :
string ques ;
string answer;
int point ;
public :
SAquestion(string ques = "",string answer = "",int point = 0):ques(ques),answer(answer),point(point){}
string getAnswer() {return answer;}
string getQuestion(){return ques ;}
int getPoint() {return point ;}
};
class MCquestion : public question
{
private :
string ques ;
string answer;
int point ;
public :
MCquestion(string ques = "",string answer = "",int point = 0):ques(ques),answer(answer),point(point){}
string getAnswer() {return answer;}
string getQuestion(){return ques ;}
int getPoint() {return point ;}
};
class TFquestion : public question
{
private :
string ques ;
string answer;
int point ;
public :
TFquestion(string ques = "",string answer = "",int point = 0):ques(ques),answer(answer),point(point){}
string getAnswer() {return answer;}
string getQuestion(){return ques ;}
int getPoint() {return point ;}
};
void readDataByDelimiter(const char* filename, vector< SAquestion>*SHORTQ) {
string line;
ifstream ifs(filename);
if (ifs.is_open()) {
cout << "Reading data...\n";
int c = 0;
while (getline (ifs,line) && (*line.c_str() != '\0')) {
string delimiter = ",";
size_t pos = 0;
string* token = new string[5];
int f = -1;
while ((pos = line.find(delimiter)) != string::npos) {
token[++f] = line.substr(0, pos);
cout << " " << token[f] << " | " ;
line.erase(0, pos + delimiter.length());
}
token[++f] = line;
cout << token[f] << endl; // last item in string
c++;
// push to vector (numerical data converted to int)
SAquestion b(token[1], token[2], atoi(token[3].c_str()));
SHORTQ->push_back(b);
}
cout << c << " row(s) read." << endl << endl;
ifs.close();
}
else
cout << "Unable to open file";
}
enter code here
int main()
{
vector<SAquestion> *s = new vector<SAquestion>();
readDataByDelimiter("SHORQ.txt", s);
cout <<s[0]->getAnswer();
}
- List item
ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –
なぜあなたは動的に 'ベクトル'を割り当てていますか? C++はJavaではなくC#ではないので、あなたはする必要はありません。あなたのメソッドへの参照渡し。 –