бла-бла-бла неразрешенный внешний символ "public: void __thiscall
ArrayStorage :: read (class std::basic_ifstream<char,struct std::char_traits<char> > &)"
бла-бла-бла
Это ошибка компоновщика. Это означает, что определение для функции ArrayStorage::read
отсутствует. Зачем? Поскольку в коде есть определение функции с именем read
, а не ArrayStorage::read
. Он должен найти его, если вы определите ArrayStorage::read
:
//Array cpp:
void ArrayStorage::read(ifstream& fin)
// ...
Как только вы пройдете через это, программа, вероятно, сможет работать. И вы, вероятно, найдете ошибки из-за цикла чтения. while (! fin.eof() )
не «[запустить], пока файл НЕ находится в конце». Он запускается, пока предыдущая операция чтения не пыталась прочитать до конца. Подумайте, что должно было произойти к моменту проверки:
while (! fin.eof() ) // in the last iteration the read didn't go beyond the end of the file
{ // so one more iteration is ran
getline (fin,line); // tries to read past the end, fails
if (line == "") continue; // line is unchanged, so it could be a non-blank line from before
myArray[arrayIndex]=line; // Saves that line in the array:
// even though no line was read
arrayIndex++;
} // goes back to the start of the loop, and only now !fin.eof() fails
// but it's too late, the damage has been done
Вы, вероятно, не хотите, чтобы это произошло. Вы хотите остановить чтение, как только чтение не удастся. Это просто: просто поместите чтение как условие:
while (getline (fin,line)) // if reading a line fails, the loop is not entered
{ // and so no extra line is added to the array