2013-11-10 2 views
0

Я хочу создать класс, но я не уверен, правильно ли объявляю массив в классе.C++ Array Declaration в заголовке

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}; 
} 

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

+2

Если вы не знаете на compile- времени (которое вы, похоже, делаете) вам может понадобиться ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). В противном случае читаем о ['std :: array'] (http://en.cppreference.com/w/cpp/container/array). Вы также хотите прочитать информацию о [членах инициализационных списков] (http://en.cppreference.com/w/cpp/language/initializer_list). –

ответ

2

В отличие от Java, C++ требует размера массива быть известным (и объявленным) во время компиляции.Если вы хотите использовать переменную типа массива, где размер НЕ известен во время компиляции, вы должны использовать std :: vector.

1

Вы должны указать размер массива или инициализировать его в своем объявлении, позволяя компилятору вывести его размер.

Если вы не знаете размер массива в точке его объявления, необработанный массив не является хорошей структурой данных для вашей проблемы. Используйте std::vector, если размер известен во время выполнения. В будущем, если размер контейнера известен во время выполнения, но не будет изменен, std::dynarray (который был отброшен из C++ 14 :() будет хорошей альтернативой.

Также рассмотрите использование C++ 11 std::array вместо массивов C, у него много улучшений (интерфейс/синтаксис полностью совместим/совместно используется с другими STL-альгортимами и контейнерами) по сравнению с открытым массивом C.