Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2011, 15:22   #1
wandererindreams
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 12
По умолчанию Параметр-ссылка со значением по умолчанию

Код:
#include <stdio.h>
#include <conio.h>

int read_number(int &number);                           
int make_series(const FILE* f_series, const int number, int &number_of_series = 1);
Пытаюсь передать number_of_series как параметр по умолчанию. Выдается ошибка: "Reference initialized whith 'int', need lvalue of type 'int'".
При строке:
Цитата:
int make_series(const FILE* f_series, const int number, int *number_of_series = 1);
пишет, что не может конвертировать 'int' в 'int*'.
Пропускает только
Цитата:
int make_series(const FILE* f_series, const int number, int number_of_series = 1);
и
Цитата:
int make_series(const FILE* f_series, const int number, int number_of_series = 0);
ну я так понимаю потому, что идет интерпритация 0 и NULL.

В чем ошибка?

Последний раз редактировалось wandererindreams; 11.08.2011 в 15:25.
wandererindreams вне форума Ответить с цитированием
Старый 11.08.2011, 15:30   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

ошибка в том, что референсы(ссылки) не могут иметь значения по умолчанию.
можно только так
Код:
int make_series(const FILE* f_series, const int number, int number_of_series = 1);
хотя если подумать то можно сделать так

Код:
static int megaval = 1;
int make_series(const FILE* f_series, const int number, int &  number_of_series = megaval);

Последний раз редактировалось f.hump; 11.08.2011 в 15:35.
f.hump вне форума Ответить с цитированием
Старый 11.08.2011, 15:35   #3
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от wandererindreams Посмотреть сообщение
Код:
int make_series(const FILE* f_series, const int number, int *number_of_series = 1);
Пытаюсь передать number_of_series как параметр по умолчанию. Выдается ошибка: "Reference initialized whith 'int', need lvalue of type 'int'".
При строке:
пишет, что не может конвертировать 'int' в 'int*'.
Код:
int make_series(const FILE* f_series, const int number, int *number_of_series = (int *) 1);
Можно так конвертировать... только зачем ?
An1ka вне форума Ответить с цитированием
Старый 11.08.2011, 15:38   #4
wandererindreams
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 12
По умолчанию

Цитата:
int make_series(const FILE* f_series, const int number, int *number_of_series = (int *) 1);

Можно так конвертировать... только зачем ?
Затем что бы значение number_of_series было изменено при выходе из функции.
Но при таком приведении '1' становится не значением для переменной, а указателем.

Ок, значит если я правильно понял, то параметрами по умолчанию могут быть только те переменные, значение которых менять не нужно. Если нужно изменить,то уже изгаляться (не считая return number_of_series)

Последний раз редактировалось wandererindreams; 11.08.2011 в 15:50.
wandererindreams вне форума Ответить с цитированием
Старый 11.08.2011, 15:55   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

если аргумент функции имеет значение по умолчанию то значение по умолчанию должно быть того же типа что и аргумент:

целое = целое
указатель = указатель
ссылка = ссылка
f.hump вне форума Ответить с цитированием
Старый 11.08.2011, 16:03   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2An1ka
Код:
int make_series(const FILE* f_series, const int number, int *number_of_series = (int *) 1);
и что это за глупость?)
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.08.2011, 16:06   #7
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
2An1ka
Код:
int make_series(const FILE* f_series, const int number, int *number_of_series = (int *) 1);
и что это за глупость?)
Указатель по умолчанию, того чего хотел ТС
An1ka вне форума Ответить с цитированием
Старый 11.08.2011, 16:22   #8
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от wandererindreams Посмотреть сообщение
Затем что бы значение number_of_series было изменено при выходе из функции.
Но при таком приведении '1' становится не значением для переменной, а указателем.

Ок, значит если я правильно понял, то параметрами по умолчанию могут быть только те переменные, значение которых менять не нужно. Если нужно изменить,то уже изгаляться (не считая return number_of_series)
Изгаляться не надо. Самый простой вариант - это сделать 2 функции:
Код:
int make_series(const FILE* f_series, const int number);
int make_series(const FILE* f_series, const int number, int &number_of_series);
Если при вызове функции указываем 3й параметр, то он будет передан по ссылке во вторую функцию и изменен. Если 3й параметр не указан, то вызываться будет первая функция.

Последний раз редактировалось An1ka; 11.08.2011 в 16:26.
An1ka вне форума Ответить с цитированием
Старый 11.08.2011, 20:13   #9
wandererindreams
Пользователь
 
Регистрация: 19.07.2011
Сообщений: 12
По умолчанию

Всем спасибо, вроде ясно, буду пробовать. Пожалуй перегрузка функции подойдет.
А это замечание:
Цитата:
Сообщение от f.hump Посмотреть сообщение
если аргумент функции имеет значение по умолчанию то значение по умолчанию должно быть того же типа что и аргумент:

целое = целое
указатель = указатель
ссылка = ссылка
вообще супер =), глаза раскрыло. Я не правильно понимал суть. Думал что значение по умолчанию будет присвоено той переменной, которая будет передана функцию (в т.ч. по ссылке или указателем). Не допёр сразу, что сам указатель тоже является значением, как и переменная на которую он указывает.
wandererindreams вне форума Ответить с цитированием
Старый 12.08.2011, 04:12   #10
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от wandererindreams Посмотреть сообщение
Код:
#include <stdio.h>
#include <conio.h>

int read_number(int &number);                           
int make_series(const FILE* f_series, const int number, int &number_of_series = 1);
Пытаюсь передать number_of_series как параметр по умолчанию. Выдается ошибка: "Reference initialized whith 'int', need lvalue of type 'int'".
При строке:
пишет, что не может конвертировать 'int' в 'int*'.
Пропускает только

и

ну я так понимаю потому, что идет интерпритация 0 и NULL.

В чем ошибка?
У вас в первом случае ошибку выдает, потому что вы хотите связать неконстатную ссылку с константой. Если вы объявите так свою функцию

Код:
int make_series(const FILE* f_series, const int number,const int &number_of_series = 1);
то все будет компилироваться.

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

Код:
int x = 1;
int make_series(const FILE* f_series, const int number, int &number_of_series = x);
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Variant как параметр по умолчанию Gregor Общие вопросы Delphi 4 06.05.2011 11:15
начальное значение ссылки на левосторонний параметр должно быть левосторонним значением Dimarik Общие вопросы C/C++ 3 03.03.2011 23:14
Ячейка с заданным значением vetal74 Microsoft Office Excel 4 16.02.2011 09:57
InputBox со значением Swatch Microsoft Office Access 1 22.12.2010 18:07
Ссылка на книгу, название которой является значением ячейки Максим23 Microsoft Office Excel 9 27.09.2010 09:21