Использование: MSVS2012C++: нарушение прав доступа месте для записи
Код
elemalg.h
#include <vector>
#include <string>
#include <fstream>
class ElemAlg
{
private:
std::string difficultlyLevel, question, answerToRead;
std::vector<std::string> questions, answers;
std::vector<std::string> GetQuiz(int);
};
elemalg.cpp
#include "elemalg.h"
std::vector<std::string> ElemAlg::GetQuiz(int difficulty)
{
if (difficulty == 1) { difficultyLevel = "algE"; }
if (difficulty == 2) { difficultyLevel = "algM"; }
if (difficulty == 3) { difficultyLevel = "algH"; }
if (difficulty == 4) { difficultyLevel = "algVH"; }
std::ifstream fin(difficultyLevel + ".txt");
while (std::getline(fin, question)) { questions.push_back(question); }
fin.close();
std::ifstream fin2(difficultyLevel + "Answers.txt");
while (std::getline(fin2, answerToRead)) { answers.push_back(answerToRead); }
fin2.close();
return questions;
}
MathTutor.cpp
#includes etc
ElemAlg *ea;
ea->GetQuiz(1);
GetQuiz
определенно прошло целое число от 1 до 4, это проверяется, прежде чем метод называется
difficultyLevel
является строка определена в заголовочном файле.
Компилятор выбрасывает Необработанное исключение и место записи нарушения доступа ... как только он попадает в первую функцию if
.
Если я удалю функции if
и определите difficultyLevel
как algE только для проверки той же проблемы.
Если удалить difficultyLevel
целиком и просто открыть файл как "algE.txt"
и "algEAnswers"
тогда я получаю ту же проблему, но в другом месте памяти после того, как код попадает в то время цикла.
Что такое 'difficultyLevel' именно? –
Параметр должен быть проверен внутри функции с утверждением, а не снаружи. Если вопросы являются глобальной переменной, я не знаю, почему вы пытаетесь ее вернуть. –
[MCVE] (http://stackoverflow.com/help/mcve), или этого не произошло. – Angew