Вы получаете сообщение об ошибке:
ни один экземпляр перегруженной функции "getline" не соответствует списку аргументов - типы аргументов: (std :: ifstream, char).
Из-за проблемы с вашим вызовом getline:
getline(QuestionFile, QuestionArray[i]);
std::getline
принимает два параметра: ссылку std::istream
и ссылку std::string
. QuestionFile
- это istream
, так что ничего страшного, однако, если вы посмотрите объявление QuestionArray
:
string QuestionArray=createStringArray(arraySize);
Вы должны заметить, что QuestionArray - это переменная типа string
. Я не думаю, что это то, что вы хотели. Вы всегда должны тщательно выбирать тип переменных, которые вы объявляете в C ++, иначе вы работаете против безопасности типов, которую компилятор пытается вам предоставить.
i
-й элемент строки QuestionArray
- это char
, а не string
. Это является причиной ошибки компилятора. Вы пытаетесь поместить строку в один символьный элемент вместо строки.
Надеемся, что с вышеприведенным объяснением предоставленное сообщение компилятора теперь будет иметь больше смысла. Он предоставляет ту же информацию, чуть более сжатую.
С этим знанием давайте обратимся к функции createStringArray
:
string createStringArray(int n)
{
string*QuestionArray = new string[n];
return *QuestionArray;
}
Вы объявляете функцию, возвращающую одну строку, когда Я ожидаю, что вы хотите, чтобы функция возвращала последовательность строк. Правильный способ вернуть последовательность строк - это использовать std::vector<std::string>
, но если вам нужно рискованное, устаревшее, ручное управление памятью, вам нужно будет возвращать указатель на строку, а не строку из этого функция. Обладая этими знаниями, вы сможете исправить эту функцию, исходный тип переменной QuestionArray
и ошибку компилятора на расстоянии go.