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 ++的新手并且不太确定,这不是根本就是初始化者。
它似乎是一个编译器错误,是由我希望整个类可用的常量成员的非静态数据成员初始化引起的。
答案 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之后才合法。