2016-03-08 2 views
-1

У меня есть то, что выглядит как этотКак сохранить значения в моем собственном массиве классов? C++ 11

class RestaurantCheck 
{ 
    private: 
    static const int MENU_LENGTH = 10; 
    static const string menu[MENU_LENGTH] = {"Gumbo", "Shrimp", etc...} 

Сразу, у меня есть проблема. Я знаю, что я не могу инициализировать данные в массиве, как сейчас, так что я попытался это ...

class RestaurantCheck 
{ 
    private: 
    static const int MENU_LENGTH = 10; 
    static const string menu[MENU_LENGTH]; 
    void displayMenu(); 

    public: 
    void showMenu() 
    { 
    RestaurantCheck thisMenu; 
    thisMenu.displayMenu(); 
} 

void RestaurantCheck::displaymenu() 
{ 
menu[0] = "Shrimp" 
menu[1] = "Gumbo" 
etc... 
cout << menu[0] 
etc... 

Однако я не могу хранить данные в массиве, как, что, как хорошо. Как я должен хранить данные в этом массиве? В качестве части назначения массив должен быть константным, он должен быть закрытым, а displayMenu также должен быть приватным, вызываемым публичной функцией.

Надеюсь, что я получаю, ясно, если нет, я постараюсь предоставить дополнительную информацию.

EDIT: Я ничего не могу редактировать из исходного файла инструкторов. Исходный файл уже создан, и он будет использовать свой собственный (предоставленный) для проверки как моего файла класса, так и моего файла заголовка. Таким образом, он должен быть инициирован вне исходного файла.

+2

Что вы не поняли из 'static const'? Вы не можете изменять константы. –

+0

Я немного смущен, полагаю. Мне нужно, чтобы массив был как статический const, в соответствии с назначением, но мне нужно вводить значения в ячейки. Как мне это сделать? – Podo

+0

Зачем кому-то редактировать «Доброе утро» и «Спасибо кучу, ~ jef» из моего сообщения? – Podo

ответ

2

Вы попадаете в ту же ловушку, что и перед вами. Ваш массив const, поэтому он должен быть инициализирован при объявлении. Но вы не можете инициализировать статические массивы строк в классе. Чем ты занимаешься? Вы инициализируете его снаружи!

так:

в файле .h:

static const std::string menu[10]; 

в файле .cpp:

const std::string RestaurantCheck::menu[10] = {"Shrimp", "Calamari", "Listeria"}; 
+0

@ SergeyA, простите, но для чего используется std :: используется? – Podo

+2

@JeffreyDilley, так как в вашем коде никогда не должно быть строки: 'using namespace std' (** NEVER **) - это позволяет компилятору понять, что я говорю о классе строк из стандартной библиотеки. – SergeyA

+0

Я использовал std в каждой отдельной программе, которую я создал. Я никогда не знал! Вы узнаете что-то новое каждый день. – Podo

0

Это то, что вы ищете?

Вы можете инициализировать статические скалярные не являющихся членами, но это должно быть сделано за пределами класса:

#include <string> 

class RestaurantCheck{ 
    static const int MENU_LENGTH = 3; 
    static const std::string menu[MENU_LENGTH]; 
}; 

const std::string RestaurantCheck::menu[RestaurantCheck::MENU_LENGTH] = {"Gumbo", "Shrimp", "Jar" }; 

обратите внимание на «инициализации линии» должна присутствовать только в один файл, лучшее место некоторые .cpp файл, скомпилированный для объекта. Вот что я имею в виду:

restaurantcheck.h - RestaurantCheck header 
restaurantcheck.cpp - RestaurantCheck implementation (best place for "init line") 
main.cpp   - program (where main() is located)