Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> добавление арументов по умолчанию выдает ошибку, немогу понять смысл 
V
    Опции темы
Gunslinger
Дата 20.10.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



Привет.
Добавил в метод:
Код

MyCells(int x1,int y1, String& T):addr(0,0), Text(T) {};

еще 2 координаты:
Код

MyCells(int x1,int y1,int x2=0,int y2=0, String& T):addr(0,0,0,0), Text(T) {};

выдает ошибку: [C++ Error] MyCells.h(28): E2260 Default value missing following parameter 'y2'. Что за чем следует?
Поставил аргумент-строку перед координатами - все в порядке. Не считая ошибки в другом методе.
Код

struct Address {
                int x1;
                int y1;
                int x2;
                int y2;
                Address(){};
               // Address(int my_x1, int my_y1): x1(my_x1),y1(my_y1){};
                Address(int my_x1,int my_y1,int my_x2,int my_y2): x1(my_x1),y1(my_y1),x2(my_x2),y2(my_y2){};
               };

class MyCells {
      private:
              Address addr;
              String Text;
// ------------------



PM MAIL   Вверх
Ln78
Дата 20.10.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(Gunslinger @  20.10.2008,  12:14 Найти цитируемый пост)
выдает ошибку: [C++ Error] MyCells.h(28): E2260 Default value missing following parameter 'y2'. Что за чем следует?

Gunslinger, в C++ аргументы по умолчанию могут быть только в самом конце. Т.е. после самого первого аргумента по умолчанию все остальные тоже должны иметь умолчания. В твоём примере String& T не является таким аргументом.
PM MAIL   Вверх
Alek86
Дата 20.10.2008, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



аргументы по умолчанию в обьявлении метода должны идти последними
а у тебя последний аргумент не по умолчанию

Добавлено через 11 минут и 24 секунды
Цитата(Ln78 @  20.10.2008,  11:22 Найти цитируемый пост)
в C++ аргументы по умолчанию могут быть только в самом конце.

Код
void func(char c1, char c2 = 0);

void func(char c1 = 0, char c2) {}


smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ln78
Дата 20.10.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(Alek86 @  20.10.2008,  12:23 Найти цитируемый пост)
void func(char c1 = 0, char c2) {}

Compiler Error C2548 
The default parameter list is missing a parameter. If you supply a default parameter anywhere in a parameter list, you must define default parameters for all subsequent parameters.
Example
void func( int = 1, int, int = 3);  // C2548

Или я  вместе со справкой VS2005 отстали от жизни, или я не понимаю, что должен символизировать этот пример. 
PM MAIL   Вверх
Alek86
Дата 20.10.2008, 12:13 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Ln78 @  20.10.2008,  12:04 Найти цитируемый пост)
Или я  вместе со справкой VS2005 отстали от жизни, или я не понимаю, что должен символизировать этот пример. 

ну...
Стандарт 8.3.6 Default arguments
Цитата

Код

class C {
void f(int i = 3);
void g(int i, int j = 99);
};
void C::f(int i = 3) // error: default argument already
{ } // specified in class scope
void C::g(int i = 88, int j) // in this translation unit,
{ } // C::g can be called with no argument



Это сообщение отредактировал(а) Alek86 - 20.10.2008, 12:14


--------------------
user posted image    user posted image
PM MAIL   Вверх
Ln78
Дата 20.10.2008, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Alek86, понял, спасибо.
Хотя, ИМХО, это способ затруднить чтение кода, когда может быть полезно дополнительно назначать умолчание для другого аргумента не в объявлении функции, непонятно. В чём преимущество такого способа?
PM MAIL   Вверх
Alek86
Дата 20.10.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



интерфейс ф-ии делится на 2 - внутренний и внешний
и внутренний таким образом можно сделать удобнее, чем внешний


--------------------
user posted image    user posted image
PM MAIL   Вверх
Gunslinger
Дата 20.10.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



писец. уже такие вещи стал забывать.
С последовательностью разобрались. А как быть с объявлением в методе класса? В заголовке прописал аргументам =0, а в реализации пишет редекларе. Т.е. в заголовке значения по умолчанию указывать нужно, а в реализации нельзя. Прототип функции и ее заголовок реализации - зеркало. Или умолчания не считаются?
PM MAIL   Вверх
Alek86
Дата 20.10.2008, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(Gunslinger @  20.10.2008,  13:07 Найти цитируемый пост)
Т.е. в заголовке значения по умолчанию указывать нужно, а в реализации нельзя.

да

кроме описанного мною случая
но им очень редко пользуются


--------------------
user posted image    user posted image
PM MAIL   Вверх
Gunslinger
Дата 20.10.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: 1
Всего: 3



спасибо!
закрыл.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.