【问题标题】:How can I store values in my class private array? c++11如何将值存储在我的类私有数组中? c++11
【发布时间】:2016-06-22 20:45:00
【问题描述】:

我有一些看起来像这样的东西

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 static,它必须是私有的,并且 displayMenu 也必须是私有的,由公共函数调用。

我希望我所了解的内容很清楚,否则我会尝试提供更多信息。

编辑: 我无法编辑讲师源文件中的任何内容。源文件已经创建,他将使用他自己的(提供的)来测试我的类文件和我的头文件。因此它需要在源文件之外启动。

【问题讨论】:

  • static const 有什么不明白的地方?你不能改变常数。
  • 我想我有点困惑。根据分配,我需要将数组作为静态常量,但我需要将值输入到单元格中。我该怎么做?
  • 为什么有人会从我的帖子中删除“早上好 SO”和“谢谢大家,~jef”?
  • @JeffreyDilley “为什么有人会从我的帖子中删除“早上好 SO”和“谢谢大家,~jef”?” 因为那是不必要的噪音,而且不是早上在这里。

标签: c++ arrays string c++11


【解决方案1】:

你和之前的许多人一样落入了同一个陷阱。您的数组是常量,因此必须在声明时对其进行初始化。但是你不能在类体中初始化静态字符串数组。你做什么工作?你在外面初始化!

像这样:

在您的 .h 文件中:

static const std::string menu[10];

在您的 .cpp 文件中:

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

【讨论】:

  • @SergeyA,原谅我,但是 std:: 是做什么用的?
  • @JeffreyDilley,因为您的代码中不应该有以下行:using namespace std (NEVER) - 这使编译器能够理解我说的是标准的字符串类图书馆。
  • 我在我创建的每个程序中都使用了 std。我从来不知道!你每天都会学到新东西。
  • 我可以在 .h 文件之外的类函数中定义数组吗?假设我在课堂上进行原型制作,并且我有 restaurant.cpp。我可以在我的 cpp 中构建类函数并在那里初始化它,还是必须完全在类之外?
  • @JeffreyDilley,您可能会在 SO 上阅读以下问题:stackoverflow.com/questions/1452721/… 是的,您可以根据需要在类函数中定义一个数组。
【解决方案2】:

这是你要找的吗?

您可以初始化静态非标量成员,但这必须在类之外完成:

#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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 2014-08-18
    • 2017-12-15
    • 1970-01-01
    • 2018-07-04
    相关资源
    最近更新 更多