Объявление массива строк в GNU C ++ - PullRequest
1 голос
/ 21 октября 2011

Мне кажется, это должно быть так просто, но я просто чувствую, что что-то упустил.

У меня в заголовочном файле есть личная переменная _stoplist Когда я объявил ее в заголовочном файле, код выглядит примерно так:

private:
    std::string _stoplist[];

Но когда позже в моей функции я решу получить к ней доступ, она будет зависать от чего угодно.

_stoplist[_length];
//cout << _length << prints 104 (its a valid int and everything)
_stoplist[0] = "b";

Сбои в коде std :: string.assign () с ошибкой сегмента. У меня есть ощущение, что я упускаю что-то очевидное здесь, но я еще не совсем понял, что.

Заранее спасибо!

РЕДАКТИРОВАТЬ: Хорошо, спасибо за помощь. Для всех, кто может прочитать это, я бы рекомендовал использовать один из ответов ниже, так как это разумный способ сделать это. В моем случае, хотя мне нужно было динамически распределить его без с использованием вектора, я просто использовал следующий код.

private:
    std::string *_stoplist;

и затем в моем файле cpp

_stoplist = new string[_length];

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

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

Вы получаете ошибку массива вне границ, потому что _stoplist не имеет размера.Вы должны либо задать ему размер, и получить доступ только к элементам в этом диапазоне, например:

private:
    std::string _stoplist[100];

, теперь вы сможете индексировать _stoplist [0] - _stoplist [99].Однако лучшее решение, вероятно, будет использовать вместо него std :: vector, так как это намного безопаснее.

private:
    std::vector< std::string > _stoplist;

Тогда вы можете использовать функции-члены, такие как resize (), чтобы увеличить его до нужного размера.

1 голос
/ 21 октября 2011

Это потому, что переменная, объявленная как std::string[], является в основном просто указателем. Чтобы использовать его, вам нужно выделить для него память. Если вы хотите выделить для него фиксированную память, попробуйте объявить ее, например, как. std::string _stoplist[5]; вместо.

...