В любом случае, я работаю над викториной для школьного проекта.Я читаю вопросы и ответы из файла CSV, который будет отображаться пользователю через терминал.Но у меня возникают проблемы при вставке моих узлов в массив.
Моя тактика здесь - сначала прочитать вопрос, а затем прочитать правильный ответ, а последние три ответа - это неправильные ответы, которые будут перемешаны позже.
ifstream questionFile("questions.csv");
getline(questionFile, header);
if(questionFile.is_open())
{
string line;
while(getline(questionFile, line))
{
stringstream ss;
ss << line;
string item;
getline(ss, item, ',');
question = item;
getline(ss, item, ',');
answer1 = item;
getline(ss, item, ',');
answer2 = item;
getline(ss, item, ',');
answer3 = item;
getline(ss, item, ',');
answer4 = item;
g.insertAndShuffle(question, answer1, answer2, answer3, answer4);
}
}
questionFile.close()
Затем я передаю эти значения в функцию, которая назначит строки ответа в узел, который также будет содержать логическое значение (правильный ответ остается верным).Вот моя проблема, я думаю ... Затем я передаю указатели на эти узлы вместе с вопросом в массив [5], чтобы я мог перемешать массив [1] - [5] для рандомизации ответов.
Здесьэто функция:
string* Game::insertAndShuffle(string question, string answer1, string answer2, string answer3, string answer4)
{
Answer *nodeC = new Answer(answer1, true);
Answer *node1 = new Answer(answer2, false);
Answer *node2 = new Answer(answer3, false);
Answer *node3 = new Answer(answer4, false);
quizArray[0] = question;
quizArray[1] = nodeC;
quizArray[2] = node1;
quizArray[3] = node2;
quizArray[4] = node3;
random_shuffle(&quizArray[1], &quizArray[5]);
return quizArray;
}
Класс, содержащий функцию:
class Game
{
public:
bool isAsked;
string quizArray[5];
int questionNum = 1;
bool letsPlay = false;
string* insertAndShuffle(string question, string answer1, string answer2, string answer3, string answer4);
string askQuestions(string* quizArray);
bool startGame(bool letsPlay, string playerName);
// bool checkAnswer(string playerResponse, string answer1);
private:
Answer *nodeC;
Answer *node1;
Answer *node2;
Answer *node3;
};
И структура, используемая для ответов:
struct Answer
{
string answer;
bool isCorrect;
Answer();
Answer(string item, bool value)
{
answer = item;
isCorrect = value;
}
};
Кажется, естьпроблема, когда я пытаюсь получить доступ к указателю на структуру через функцию класса.Вот моя ошибка:
./project.hpp:22:2: error: unknown type name 'Answer'
Answer *nodeC;
^
./project.hpp:23:2: error: unknown type name 'Answer'
Answer *node1;
^
./project.hpp:24:2: error: unknown type name 'Answer'
Answer *node2;
^
./project.hpp:25:2: error: unknown type name 'Answer'
Answer *node3;
^
./project.hpp:43:2: error: C++ requires a type specifier for all declarations
CorrectAnswer();
^
./project.hpp:44:2: error: C++ requires a type specifier for all declarations
CorrectAnswer(string item, bool value)
^
In file included from projectMain.cpp:8:
./project.cpp:85:22: error: no matching constructor for initialization of 'Answer'
Answer *nodeC = new Answer(answer1, true);