2015-04-22 3 views
0

Прежде всего это мое задание класса, и я уже вытащил все свои волосы и решил попросить вас, ребята, о помощи. Итак, у меня есть txt-файл с некоторой структурированной информацией (строка, double, string, double ...), и мне нужно прочитать его в массив структур. Эта часть кода работает нормально. Но когда я ставлю отдельную функцию и попытаюсь назвать ее, ничего не получится. Я предполагаю, что значения, которые я передаю в функцию, записываются неправильно. Пожалуйста, укажи мне, где я испортился. Заранее большое спасибо!C++ pass struct к функции

#include <iostream> 
#include <iomanip> 
#include <string> 
#include <fstream> 

using namespace std; 
int numberOfItems; 

ifstream inFile; 

struct menuItemType 
{ 
    string menuItem; 
    double menuPrice; 
}; 

void showMenu(menuItemType, int&); 
int getData(ifstream, menuItemType*, int); 

int main() 
{ 
    menuItemType *menuList; 

    menuList = new menuItemType[numberOfItems]; 

    int getData(ifstream inFile, menuItemType* menuList, int numberOfItems); 

    cout << "Test\n"; 

    return 0; 
} 

// Get Data from txt file 
int getData(ifstream inFile, menuItemType* menuList, int numberOfItems) 
{ 

    int counter; 
    string s; 

    inFile.open("test.txt"); 

    for (counter = 0; counter < numberOfItems; counter++) 
    { 
     getline(inFile, s); 
     menuList[counter].menuItem = s; 
     inFile.ignore(); 
     inFile >> menuList[counter].menuPrice; 
     inFile.ignore(); 
    } 

    inFile.close(); 

    return 1; 
} 
+0

Составляет ли он? – user3528438

+1

Вы не инициализируете 'numberOfItems', вы повторно используете' getData' вместо того, чтобы вызывать его, и даже если вы его вызывали, он не будет компилироваться, потому что потоки не могут быть скопированы. – user657267

+0

Он компилируется без ошибок. numberOfItems предполагается инициализироваться в функции getData. –

ответ

0
int getData(ifstream inFile, menuItemType* menuList, int numberOfItems); 

объявляет функцию внутри main() (она работает, и это на самом деле скрывает вне основной декларации). Вы, вероятно, намерены вызова функция getData, как

getData(inFile, menuList, numberOfItems); 

где inFile, menuList, numberOfItems параметры, которые необходимо определить/пасс.

Вам также необходимо передать ifstream по ссылке (как вы не можете ее скопировать) или иначе std::move это при передаче (последняя опция действительна только в C++ 11).

+0

Это то, что я делал раньше, но это не влияет на время выполнения. 'int getData (ifstream & inFile, menuItemType * menuList, int & numberOfItems);' –

+0

вам нужно сначала выполнить 'ifstream inFile;' и передать 'inFile' в вашу функцию, как указано в ответе. Теперь у вас есть просто объявление функции, а не вызов функции. – vsoftco

Смежные вопросы