2013-10-26 2 views
0

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

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

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

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

Благодаря

+1

Почему вы не можете использовать 'const' перед массивом? – 0x499602D2

+1

Какая ошибка вы получаете, когда включаете «const»? –

+0

Почему вы не можете использовать что-то, что не обсуждалось в классе? Это кажется глупым. – nhgrif

ответ

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 только по параметрам, которые являются либо указателями, либо передаются по ссылке.

Смежные вопросы