3

保存.cpp

#include "save.h"
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
Save::Save()
{
}

我已经评论了所有功能并从 Save::Save 中删除了竞争,但它不会影响错误。
保存.h

#ifndef SAVE_H
#define SAVE_H
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
class Save
{
    public:
        Save();
        void vDisplay();
        char cDecode();
        bool bFileExists(const string& crsFileName);
        const char ccTab = 9;
        const char ccHelp[5] = "help";
        const char ccNo[3] = "no";
        const char ccStart[6] = "start";
        const char ccQuit[5] = "quit";
        const char ccYes[4] = "yes";
};
#endif // SAVE_H

我使用 g++ 4.9 并在 C++11 中编译,它在 save.cpp 的第 6 行给出了这个错误,尽管我已经检查过了,但我是 c++ 新手,不太确定,这不是初始化器。
这似乎是由我希望整个类都可以使用的常量成员的非静态数据成员初始化引起的编译器错误。

4

2 回答 2

4

错误消息令人困惑。它指向构造函数(实际上甚至没有初始化列表),即使真正的罪魁祸首是这一行(以及它后面的类似行):

const char ccHelp[5] = "help";

GCC手册说从 4.7 开始支持该功能,但 4.9 显然无法编译您的程序。这似乎是一个编译器错误。请记住,在 GCC 5.1 之前,C++11 支持是实验性的。是您的程序在 4.9 中重现编译器错误,是您的程序在 5.1 中编译良好。

因此,您的选择是 1)升级您的编译器或 2)使用更丑陋的初始化形式,这似乎在 4.9 中有效:

const char ccHelp[5] = {'h','e','l','p','\0'}; // ugly :(

作为旁注:您使用std::string,但您忘记包含<string>wherestd::string的定义。

于 2016-02-15T16:40:42.047 回答
2

类内初始化:

const char ccHelp[5] = "help";

自 C++11 起才合法。

于 2016-02-15T16:20:24.843 回答