Поисковые запросы Google, которые я пробовал, приводят меня к людям с ошибками в их программах. Я предпочел бы просто знать, как сделать это правильно, чем откат от неисправного кода.В C++ как объявить массив, который будет использоваться классом?
У меня есть массив, это const int.
В моем классе я хочу инициализировать другой массив, но с таким же количеством элементов.
После инициализации первого массива, в классе я пробовал:
int array[array.length()];
Но компилятор стонет это не константа.
Даже когда я
const string thestring = "Dummy example";
const static int strlen = (int)thestring.length();
Тогда позже в классе I:
class dostuff {
int newstring[strlen];
);
Компилятор все еще жалуется на меня.
Это оставляет меня пытаются первым провозглашаем, например:
const string thestring = "Dummy";
Тогда в классе, просто сосчитать элементы вручную:
class Enigmatise {
int duplicatelengthstring[5]; // Just counted by hand. :-(
);
Компилятор счастлив теперь имеет постоянное выражение , но я не доволен, потому что, если я изменю определение основной строки на «Больше символов», тогда мне нужно подсчитать их вручную или cout с помощью .length(), а затем использовать новую константу численное выражение в классе, делая все это вручную. Это выглядит несчастным случаем.
Поэтому, если у меня есть
const string thestring = "Dummy example";
Как потом объявить, в классе, другой массив одинаковой длины для манекена в классе?
Если вы не хотите/можете использовать динамическое выделение, под C++ 11 может быть возможно работать что-то с помощью 'constexpr 'но я не уверен. – xvan
Я дал ему попытку, но 'std :: basic_string' не является литералом. Из-за этого мы не можем: make 'constexpr std :: string', использовать' std :: basic_string :: operator [] 'или' size() 'в' constexpr' или использовать 'c_str () 'в' constexpr', чтобы получить базовую строку C и проверить длину оттуда. Также кажется, что идиома ol '' sizeof (x)/sizeof (x [0]) не будет работать; при использовании с его строкой он вычисляет '32' вместо' 13'. Вероятно, есть способ сделать это, но я еще недостаточно квалифицирован, чтобы понять, что это такое. –
Было бы легко сделать, если бы он использовал строку C; 'string_literal', как предложено в статье N4121, также поможет, но я не знаю, что с этим произошло, если что-нибудь. На данный момент самое лучшее, что я могу придумать, - создать класс строки времени компиляции, такой как 'literal_str' (https: //www.daniweb.com/programming/software-development/code/482276/c-11-compile-time-string-concatenation-with-constexpr) и дать ему функцию 'constexpr size_t size()'. При необходимости он также должен был бы использовать его с помощью 'std :: string'. Я честно не знаю, как использовать 'constexpr', чтобы получить размер в противном случае. –