私はIPODプレイリストのようなプロジェクトを持っています。私はベクトルを使用せずに構造体配列内の私のデータを読み込むのに問題があります。私のBFは私の教授はベクトルを使わないようにするのは間違っていると言いますが、それがルールです。皆さんには何か提案がありますか?私の教授は私が近くにいると言ったが、まだコンパイルしていないと言った。任意の助けをありがとう:)C++ポインタを使って構造体データを読み込む(曲のプレイリストプログラム)
Struct Songs{
string title;
string artist;
int mem; //size of file in MBs
}song[20]; //up to 20 possible songs
int main
{
song * pointer = new song;
int num = 0;
ifstream fin;
fin.open("input.txt")
while (fin.good())
{
getline(fin, *pointer[num].title;
if (*pointer[num].title.empty()) //to skip blank lines
continue;
getline(fin, *pointer[num].artist;
fin >> *pointer[num].mem.get(); //get to avoid whitespace/enter
num++;
}
for (int i = 0; i<num;i++) // my test to see if it reads in properly
{
cout << *pointer[num].title << endl;
cout << *pointer[num].artist << endl;
cout << *pointer[num].mem << endl;
}
fin.close();
delete pointer [] ;
return 0;
}
コンパイラのエラーを表示することをお勧めします。とにかく、それを見て、あなたは '曲'ではなく、 '曲'を指し示そうとしています。最初の行の構文は、動的に作成された新しいオブジェクトの場合は 'Songs * pointer = new Songs;'、プレマイドオブジェクトへのポインタの場合は 'Songs * pointer = song;'でなければなりません。また、 'int * intPtr =&somePreviousVariable;のように、ポインタを削除するときはメモリ位置へのポインタだけで' delete'を使います。 'int * intPtr = new int [20];'のように、 'new'で作成された配列を含むポインタに対しては' delete [] 'を使います。あなたの場合、 'pointer'はpremade配列を指しています。 – chris
ありがとう私はそれを変更します – gamergirl22
あなたのコードは単純なエラーで謎めいています。コンパイラが非常に有用なエラーを使って自分で修正する必要があります。私たちはあなたの宿題をするためにここにいるわけではありません。 – spencercw