如何修复此数组用作初始化程序错误?

时间:2016-02-15 16:03:26

标签: c++ error-handling g++ g++4.9

save.cpp

#include "save.h"
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
Save::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 ++的新手并且不太确定,这不是根本就是初始化者。
它似乎是一个编译器错误,是由我希望整个类可用的常量成员的非静态数据成员初始化引起的。

2 个答案:

答案 0 :(得分:4)

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

const char ccHelp[5] = "help";

GCC manual表示自4.7以来支持该功能,但4.9显然无法编译您的程序。这似乎是一个编译器错误。请记住,在GCC 5.1之前,C ++ 11支持是实验性的。 Here是你的程序在4.9中再现编译器错误,而here是你的程序在5.1中编译得很好。

所以,你的选择是1)升级你的编译器或2)使用uglier形式的初始化,这似乎工作在4.9:

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

作为旁注:您使用std::string,但忘记在<string>中包含std::string

答案 1 :(得分:2)

课堂初始化:

const char ccHelp[5] = "help";

仅在C ++ 11之后才合法。