Как исправить этот массив, используемый в качестве ошибки инициализатора?

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, и это дает мне эту ошибку в 6-ой строке save.cpp, хотя я проверял это, но я новичок в c ++ и не совсем уверен, это не инициализатор вообще.
Кажется, это ошибка компилятора, вызванная нестатической инициализацией членов данных константных членов, которые я хочу быть доступными для всего класса.

2

Решение

Сообщение об ошибке сбивает с толку. Он указывает на конструктор (который действительно даже не имеет списка инициализатора), даже если реальным виновником является эта строка (и аналогичные строки, следующие за ней):

const char ccHelp[5] = "help";

НКУ руководство говорит, что функция поддерживается с 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 :(

В качестве обозначения: Вы используете std::string, но вы забыли включить <string> где std::string определено.

4

Другие решения

Инициализация в классе:

const char ccHelp[5] = "help";

только с C ++ 11.

2

По вопросам рекламы [email protected]