M. *_*ann 3 c++ error-handling g++ g++4.9
保存.cpp
#include "save.h"
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
Save::Save()
{
}
Run Code Online (Sandbox Code Playgroud)
我已经注释了所有函数并从 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
Run Code Online (Sandbox Code Playgroud)
我使用 g++ 4.9 并在 C++11 中编译,它在 save.cpp 的第 6 行给了我这个错误,虽然,我已经检查过它,但我是 c++ 新手,不太确定,这不是一个根本没有初始化程序。
这似乎是由常量成员的非静态数据成员初始化引起的编译器错误,我希望对整个类可用。
错误消息令人困惑。它指向构造函数(实际上甚至没有初始化列表),尽管真正的罪魁祸首是这一行(以及它后面的类似行):
const char ccHelp[5] = "help";
Run Code Online (Sandbox Code Playgroud)
GCC手册说从 4.7 开始就支持该功能,但 4.9 显然无法编译你的程序。这似乎是一个编译器错误。请记住,C++11 支持在 GCC 5.1 之前一直处于实验阶段。这是您的程序在 4.9 中重现编译器错误,这是您的程序在 5.1 中编译良好。
因此,您的选择是 1) 升级编译器或 2) 使用更丑陋的初始化形式,这似乎在 4.9 中有效:
const char ccHelp[5] = {'h','e','l','p','\0'}; // ugly :(
Run Code Online (Sandbox Code Playgroud)
作为旁注:您使用std::string,但您忘记了定义的<string>位置。std::string
| 归档时间: |
|
| 查看次数: |
10414 次 |
| 最近记录: |