2016-03-08 18 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... 

但是我无法将数据存储像数组中也是如此。 我应该如何在这个数组中存储数据?作为赋值的一部分,数组必须是const静态的,它必须是私有的,并且displayMenu也必须是私有的,由公共函数调用。

我希望我明白,如果不是,我会尽力提供更多信息。编辑: 我无法编辑任何教师源文件。源文件已创建,他将使用他自己的(提供)来测试我的类文件和我的头文件。因此它需要在sourcefile之外启动。

+2

什么没有你'静态const'明白了吗?你不能改变常量。 –

+0

我想我有点困惑。 我需要根据赋值将数组作为静态常量,但我需要将值输入到单元格中。我怎么做? – 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" }; 

注意“INIT线”只能在一个文件存在,最好的地方是一些的.cpp被编译为对象的文件。这里是我的意思是:

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