何とか何とか何とか未解決の外部シンボル"public: void __thiscall
ArrayStorage ::これは、リンカエラーです(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
これはコンパイラエラーではなくリンカエラーです。とにかく、あなたの行の読み方のイディオムは間違っています(あなたはEOFを使用してはいけません)が、文字通り何百万という疑問があります。 –
'!fin.eof()'は 'getline'が成功することを保証しません。 (これは確かにリンカエラーの原因ではありませんが) –
'getline'はどのような点でこの問題に関係していると思いますか?それは前に動作しましたが、一度その行を追加するだけで失敗し始めますか?私の推測では、 'getline'の仕組みが分からず、問題にぶつかったので、エラーメッセージを慎重に読むのではなく、それが実際に不平を言っているのを見るのではなく、 。 –