2017-12-07 12 views
0

こんにちは私はファイルを読み込んで構造体の配列にファイルからデータを取得する必要があります。ファイルから構造体のC + +の充填配列

構造

struct Activity { 
    string ID; 
    string Name; 
    string quantity; }; 

私はファイル

int* fillStructure(ifstream &fileActivity){ 


    int i=0; 
    int numberOfElements = numberOfLines(fileActivity); 

    Activity* myActivity = new Activity[numberOfElements]; 

    while (i < numberOfElements) 
    { 
      getline(fileActivity, myAktivity[i].ID, ','); 
      getline(fileActivity, myActivity[i].Name, ','); 
      getline(fileActivity, myActivity[i].quantity, '\n');  
      i++; 
    } 

    fileActivity.close(); 
    return myActivity; } 

から読み取るため、この機能を持っていると私は構造体のメンバーを印刷するには、main関数にしようとすると、それは

int main(){ 



    if (!(fileActivity.is_open())){ 
     cout << "Error when reading file" << endl; 
     return 0; 
    } 

    fillStructure(fileActivity); 

    cout << myActivity[1].ID << endl; return 0; } 

仕事doesntのI初心者です、あなたは私が間違っていることを教えてくれますか?

+2

へようこそ私のために動作します。最初に間違っていることは、C++の質問にC言語タグを使用していることです。あなたのコードは有効なCコードではありません。次に、[ツアー](https://stackoverflow.com/tour)と[質問する方法](https://stackoverflow.com/help/how-to-ask)のページを最初に読んでください。これは、最初に[MCVE](https://stackoverflow.com/help/mcve)が良いことではないことを示しています。 – Gerhardh

+0

'myActivity'はローカル変数です。 'fillStructure'関数の外には存在しません。 –

+0

あなたのfillStructureはファイルからデータを読み込みますか? getline関数は何をしますか?それは興味深い部分です – user3532232

答えて

3

myActivityvoid fillStructure(ifstream &fileActivity)に記載しましたが、int main()からアクセスしようとしました。

0

main関数で戻り値を宣言する必要があります。

struct Activity { 
string ID; 
string Name; 
string quantitiy; 
}; 

Activity* fillStructure(ifstream &fileActivity) { 

int i = 0; 
int numberOfElements = numberOfLines(fileActivity); 
Activity* myActivity = new Activity[numberOfElements]; 

while (i < numberOfElements) 
{ 
    getline(fileActivity, myActivity[i].ID, ','); 
    getline(fileActivity, myActivity[i].Name, ','); 
    getline(fileActivity, myActivity[i].quantitiy, '\n'); 
    i++; 
} 

fileActivity.close(); 

return myActivity; 
} 


int main(){ 

ifstream fileActivity ("test.txt", ifstream::in); 
Activity* retFile; 

retFile = fillStructure(fileActivity); 

cout << retFile[1].ID << endl; 

return 0; 
} 

は、このような メイン機能に fillStructure関数の戻り値の型を宣言します。

Activity* retFile; 

このcodesnippetはSO

関連する問題