Class 'FileIO' 有一个非法的 zero-sized 数组;多个字符字符串作为成员数据问题

Class 'FileIO' has an illegal zero-sized array; Multiple char strings as member data issue

我只想将多个字符数组作为成员数据存储在我的 FileIO class 的私有字段中。出于某种原因,我可以有一个字符数组并且它工作正常,但是当我添加第二个时,我得到标题中所述的错误。

这段代码工作正常:

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(Account*) 函数,以存储使用 getline() 从文本文件中检索到的一个字符。这是相关代码:

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

我想将同一个文本文件中的更多行存储在单独的 char 数组中,但正如您所见,我显然只能将一个数组作为 FileIO class 的成员变量。这是为什么?

char accNum[]; 是零大小的数组,在 C++ 中是非法的。

如果您要处理 "strings",那么您应该放弃使用 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();
}