【问题标题】:C++ Array Declaration in Header标头中的 C++ 数组声明
【发布时间】:2013-11-10 18:34:24
【问题描述】:

我想创建一个类,但我不确定我是否在类中正确声明了一个数组。

my header file

#ifndef SOMECLASS_H
#define SOMECLASS_H
#include <string>    
class MyClass {
    public:
       MyClass();
       ~MyClass();
    private:
       std:string myStringArray[];
       int myIntegerArray[];
};    
#endif SOMECLASS_H  

我的课程文件

#include "someClass.h"

MyClass::MyClass() {
    std::string myStringArray[] = {"Option1","Option2",
                                   "Option3","Option4"};
    int myIntegerArray[] = {1,2,3,4};
}

但这似乎不起作用...我想在创建类时初始化数组。有人可以向我解释我做错了什么。谢谢。

【问题讨论】:

标签: c++ arrays class header


【解决方案1】:

与 Java 不同,C++ 要求在编译时知道(并声明)数组的大小。如果要使用在编译时大小未知的数组类型变量,则应使用 std::vector。

【讨论】:

    【解决方案2】:

    您应该指定数组的大小,或在声明时对其进行初始化,让编译器推断其大小。

    如果您在声明时不知道数组的大小,则原始数组不是解决问题的好数据结构。如果大小在运行时已知,请使用std::vector。将来,如果容器的大小在运行时已知但不会更改,std::dynarray(从 C++14 中丢弃:()将是一个不错的选择。

    还可以考虑使用 C++11 std::array 而不是 C 数组,与裸 C 数组相比,它有很多改进(接口/语法与其他 STL 算法和容器完全兼容/共享)。

    【讨论】:

      猜你喜欢
      • 2010-09-22
      • 2010-09-24
      • 2015-03-01
      • 1970-01-01
      • 2016-12-17
      • 2017-04-07
      • 2017-02-01
      • 1970-01-01
      • 2016-12-07
      相关资源
      最近更新 更多