B b(A(i),A(i)) : error: duplicate parameter name :(
От: Anton V. Kolotaev  
Дата: 09.06.03 08:55
Оценка:
Привет всем!

Забавно, но на код

struct A {
    A(int) {}
};

struct B {
    B(A,A) {}
};

void f() {
    int i = 0;
    B b(A(i),A(i));
}


icl ругается
error: duplicate parameter name
      B b(A(i),A(i));
               ^



Это глюк компилятора или просто некорректный код?
Re: B b(A(i),A(i)) : error: duplicate parameter name :(
От: Аноним  
Дата: 09.06.03 09:01
Оценка: 6 (1)
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>
AVK>error: duplicate parameter name
AVK>      B b(A(i),A(i));
AVK>


AVK>Это глюк компилятора или просто некорректный код?


Некорректный код. Ты объявляешь функцию b, принимающую два одноименных параметра.
Re[2]: B b(A(i),A(i)) : error: duplicate parameter name :(
От: Доброжелатель Россия  
Дата: 09.06.03 09:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Anton V. Kolotaev, Вы писали:


AVK>>
AVK>>error: duplicate parameter name
AVK>>      B b(A(i),A(i));
AVK>>


AVK>>Это глюк компилятора или просто некорректный код?


А>Некорректный код. Ты объявляешь функцию b, принимающую два одноименных параметра.


А при чем здесь функция? Здесь объявляется переменная типа B.
Мой компиллятор вообще выдает
error C2086: 'i' : redefinition
Я чего-то совсем ничего не понимаю... На мой взгляд все корректно.
Не все в этом мире можно выразить с помощью нулей и единиц...
Re[3]: B b(A(i),A(i)) : error: duplicate parameter name :(
От: Anton V. Kolotaev  
Дата: 09.06.03 10:06
Оценка: 2 (1)
Здравствуйте, Доброжелатель, Вы писали:

AVK>>>      B b(A(i),A(i));
AVK>>>


А>>Некорректный код. Ты объявляешь функцию b, принимающую два одноименных параметра.


Д>А при чем здесь функция? Здесь объявляется переменная типа B.

Д>Мой компиллятор вообще выдает
Д>error C2086: 'i' : redefinition
Д>Я чего-то совсем ничего не понимаю... На мой взгляд все корректно.

Этот код эквивалентен следующему
    B b(A i, A i);


что рассмаиривается компилятором как объявление функции. Ошибку он выдает потому, что два аргумента названы одинаково. Если написать B b(A(i),A(j)), это будет корректное объявление функции, а скажем B b(A(i),A(0)) — конструирование объекта b типа B значением (A(i),A(0)).
Re[3]: B b(A(i),A(i)) : error: duplicate parameter name :(
От: hobby  
Дата: 09.06.03 10:09
Оценка:
Anton V. Kolotaev

borland 5.5 тоже ошибку выдает. Я в непонятках.
Если заменить struct на class... public...
то все работает.
Re[4]: B b(A(i),A(i)) : error: duplicate parameter name :(
От: Аноним  
Дата: 09.06.03 10:23
Оценка:
Здравствуйте, hobby, Вы писали:

H>Если заменить struct на class... public...

H>то все работает.

Вот это странно!
Re[4]: B b(A(i),A(i)) : error: duplicate parameter name :(
От: Доброжелатель Россия  
Дата: 09.06.03 10:29
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Здравствуйте, Доброжелатель, Вы писали:


AVK>
AVK>>>>      B b(A(i),A(i));
AVK>>>>


А>>>Некорректный код. Ты объявляешь функцию b, принимающую два одноименных параметра.


Д>>А при чем здесь функция? Здесь объявляется переменная типа B.

Д>>Мой компиллятор вообще выдает
Д>>error C2086: 'i' : redefinition
Д>>Я чего-то совсем ничего не понимаю... На мой взгляд все корректно.

AVK>Этот код эквивалентен следующему

AVK>
AVK>    B b(A i, A i);
AVK>


AVK>что рассмаиривается компилятором как объявление функции. Ошибку он выдает потому, что два аргумента названы одинаково. Если написать B b(A(i),A(j)), это будет корректное объявление функции, а скажем B b(A(i),A(0)) — конструирование объекта b типа B значением (A(i),A(0)).


Ну да... Согласно Страуструпу "все, что можно принять за объявление, является объявлением..."
Не все в этом мире можно выразить с помощью нулей и единиц...
Re: B b(A(i),A(i)) : error: duplicate parameter name :(
От: apm Россия  
Дата: 09.06.03 10:55
Оценка: 4 (1)
Здравствуйте, Anton V. Kolotaev, Вы писали:

[]

struct A {
    A(int) {}
};

struct B {
    B(A,A) {}
};

void f() {
    int i = 0;
    B b((A(i)),(A(i)));
}
... << RSDN@Home 1.0 beta 7a >>
BB for fun
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.