Как вы можете передать массив строк в функцию как константу в C ++?

0

Я работаю над частью домашней работы по структурированному программированию, которая требует, чтобы я делал программу, которая позволяет пользователю вводить имена бла-бла-бла и так далее. То, что я хочу сделать после ввода имен в массив строк, - это распечатать их на экране. Я надеялся выполнить это, передав массив и количество содержащихся в нем имен для функции, которая затем выведет их на экран. Я хотел передать массив и количество имен в качестве констант, чтобы он защищал их, чтобы они не могли быть изменены функцией, только для чтения. Я не понимаю, почему я не могу поставить const перед строковым массивом или числом имен.

void writeNames (const string namelist[], const int number_of_names)

Это что-то, что я просто должен принять или есть способ, которым я могу передать оба из них только для чтения функции? Я могу выполнить домашнее задание без этого, так что это скорее вопрос любопытства, чем "помочь мне с моей домашней работой".

PS Векторы, похоже, являются способом сделать гораздо больше вещей со строками и т.д., Но мы еще не добрались до них в классе, и поэтому я тоже не могу их использовать.

благодаря

  • 1
    Почему вы не можете использовать const перед массивом?
  • 1
    Какую ошибку вы получаете, когда вы включаете "const"?
Показать ещё 2 комментария
Теги:
string
arrays
const

1 ответ

0

Не видя, что вы делаете в рамках функции, трудно ответить на вопрос, но мой хрустальный шар говорит, что вы, вероятно, делаете то, что может потенциально изменить один из параметров в вашем методе, поэтому компилятор жалуется, потому что вы объявили параметр 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 только по параметрам, которые являются либо указателями, либо передаются по ссылке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню