Я работаю над частью домашней работы по структурированному программированию, которая требует, чтобы я делал программу, которая позволяет пользователю вводить имена бла-бла-бла и так далее. То, что я хочу сделать после ввода имен в массив строк, - это распечатать их на экране. Я надеялся выполнить это, передав массив и количество содержащихся в нем имен для функции, которая затем выведет их на экран. Я хотел передать массив и количество имен в качестве констант, чтобы он защищал их, чтобы они не могли быть изменены функцией, только для чтения. Я не понимаю, почему я не могу поставить const перед строковым массивом или числом имен.
void writeNames (const string namelist[], const int number_of_names)
Это что-то, что я просто должен принять или есть способ, которым я могу передать оба из них только для чтения функции? Я могу выполнить домашнее задание без этого, так что это скорее вопрос любопытства, чем "помочь мне с моей домашней работой".
PS Векторы, похоже, являются способом сделать гораздо больше вещей со строками и т.д., Но мы еще не добрались до них в классе, и поэтому я тоже не могу их использовать.
благодаря
Не видя, что вы делаете в рамках функции, трудно ответить на вопрос, но мой хрустальный шар говорит, что вы, вероятно, делаете то, что может потенциально изменить один из параметров в вашем методе, поэтому компилятор жалуется, потому что вы объявили параметр const.
Например, что-то вроде этого прекрасно работает:
void writeNames(const std::string namelist[], const int number_of_names)
{
for(int i = 0; i < number_of_names; i++) {
std::cout << namelist[i] << std::endl;
}
}
Однако что-то подобное может вызвать ошибку компилятора, поскольку вы меняете одну из переменных:
void writeNames(const std::string namelist[], const int number_of_names)
{
while(number_of_names--) { // <-- We're modifying a const value here
std::cout << namelist[count] << std::endl;
}
}
Кстати, включение модификатора const в параметр "number_of_names" несколько избыточно, поскольку вы передаете параметр по значению, поэтому изменение значения внутри функции не повлияет на значение входного параметра в вызывающей функции. Однако изменение любой из строк в массиве будет отражено в вызывающей функции, поэтому модификатор const имеет смысл. Обычно вы будете использовать const только по параметрам, которые являются либо указателями, либо передаются по ссылке.
const
перед массивом?