Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > добавление арументов по умолчанию выдает ошибку


Автор: Gunslinger 20.10.2008, 11:14
Привет.
Добавил в метод:
Код

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;
// ------------------



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

Gunslinger, в C++ аргументы по умолчанию могут быть только в самом конце. Т.е. после самого первого аргумента по умолчанию все остальные тоже должны иметь умолчания. В твоём примере String& T не является таким аргументом.

Автор: Alek86 20.10.2008, 11:23
аргументы по умолчанию в обьявлении метода должны идти последними
а у тебя последний аргумент не по умолчанию

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

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

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


smile

Автор: Ln78 20.10.2008, 12:04
Цитата(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 отстали от жизни, или я не понимаю, что должен символизировать этот пример. 

Автор: Alek86 20.10.2008, 12:13
Цитата(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


Автор: Ln78 20.10.2008, 12:19
Alek86, понял, спасибо.
Хотя, ИМХО, это способ затруднить чтение кода, когда может быть полезно дополнительно назначать умолчание для другого аргумента не в объявлении функции, непонятно. В чём преимущество такого способа?

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

Автор: Gunslinger 20.10.2008, 13:07
писец. уже такие вещи стал забывать.
С последовательностью разобрались. А как быть с объявлением в методе класса? В заголовке прописал аргументам =0, а в реализации пишет редекларе. Т.е. в заголовке значения по умолчанию указывать нужно, а в реализации нельзя. Прототип функции и ее заголовок реализации - зеркало. Или умолчания не считаются?

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

да

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

Автор: Gunslinger 20.10.2008, 15:59
спасибо!
закрыл.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)