2015-11-10 2 views
0

Все, что я хочу, это хранить несколько массивов символов в качестве данных элемента в приватном поле моего класса FileIO. По какой-то причине у меня может быть один массив char, и он отлично работает, но вскоре, когда я добавлю второй, я получаю ошибку, указанную в названии.Класс 'FileIO' имеет незаконный массив нулевого размера; Множественные строки символов как проблема с данными членов

Этот код работает отлично:

class FileIO 
{ 
private: 
    char accNum[]; 
public: 
    FileIO(); 
    ~FileIO(); 
    void WriteData(Account*); 
    void WriteData(Person*); 
    void ReadData(Account*); 
}; 

Этот код выдает ошибку:

class FileIO 
{ 
private: 
    char accNum[]; 
    char persName[]; 
public: 
    FileIO(); 
    ~FileIO(); 
    void WriteData(Account*); 
    void WriteData(Person*); 
    void ReadData(Account*); 
}; 

accNum [] используется в ReadData (счета *) функции для хранения одного символа, извлеченной из текстовый файл с помощью getline(). Вот код, который:

void FileIO::ReadData(Account * acc) 
{ 
    ifstream accFile("accInfo.txt"); 
    accFile.getline(accNum, 100); 
    cout << accNum << "\n"; 
    accFile.close(); 
} 

Есть несколько строк в одном текстовом файле, который я хочу, чтобы хранить в отдельных символьных массивов, но как вы можете видеть, я могу по-видимому, только один массив в качестве переменной-члена класс FileIO. Почему это?

ответ

1

char accNum[]; - массив нулевого размера и является незаконным в C++.

Если вы собираетесь иметь дело с «строками», вам следует отказаться от использования строк стиля c и использовать std::string. Используя std::string, ваш код будет тогда

class FileIO 
{ 
private: 
    std::string accNum; 
public: 
    FileIO(); 
    ~FileIO(); 
    void WriteData(Account*); 
    void WriteData(Person*); 
    void ReadData(Account*); 
}; 

void FileIO::ReadData(Account * acc) 
{ 
    ifstream accFile("accInfo.txt"); 
    getline(accFile, accNum); 
    cout << accNum << "\n"; 
    accFile.close(); 
} 
+0

Работал отлично. Благодаря! – brysonmay15