Ошибки, баги, вопросы - страница 1691

 
code generation error
void OnStart()
{
  int a = {0}; // code generation error
}
 
Andrey Dik:

Какие значения спреда выдает функция CopySpread() для соответствующего периода графика?

Непонятно, то ли средний, минимальный или максимальный, а в справке по функции ничего об этом не сказано.  

 
Andrey Dik:

Какие значения спреда выдает функция CopySpread() для соответствующего периода графика?

Непонятно, то ли средний, минимальный или максимальный, а в справке по функции ничего об этом не сказано.  

где, на счете или в тестере
 
Alexander Bereznyak:
где, на счете или в тестере
ни того ни того нет в справке. 
 

ambiguous call to overloaded function with the same parameters

class A
{
public:  
//  void func( const int ) const {} // если заменить на это - будет компилироваться
  void func( const int ) {}

//  void func( const int& ) const {} // если заменить на это - будет компилироваться
  void func( const int& ) {}
};

void OnStart()
{
  A a;

  a.func(0);  

  int i1 = 0;
  a.func(i1);  

  const int i2 = 0;
  a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters  
}

Это мое непонимание или баг? 

 
fxsaber:

Это мое непонимание или баг? 

В моем понимании этот код должен вести себя одинаково и в том и в том случае.
 
fxsaber:

ambiguous call to overloaded function with the same parameters

Это мое непонимание или баг? 

Непонимание.

Ну, всё, я ответил. )))) 

 
Комбинатор:
В моем понимании этот код должен вести себя одинаково и в том и в том случае.

Так же думаю.

Sergei Vladimirov:

Непонимание.

Ну, всё, я ответил. )))) 

Этот тупой пример исходника пришлось долго создавать. Пока создавал, чувство юмора почти исчезло. 

 
fxsaber:

Этот тупой пример исходника пришлось долго создавать. Пока создавал, чувство юмора почти исчезло. 

Хорошо. )

 Во всех трёх вариантах вызова невозможно понять, по значению или по ссылке передаётся аргумент, потому компилятор и не может выбрать, какую функцию вызывать. А модификатор const их перегружает: void f(){} и void f() const {} - это разные функции. Если в вашем примере объявить один из методов как const, то неопределённость исчезнет: компилятор будет выбирать нужный метод в зависимости от того, из константного объекта происходит вызов или нет (тип аргумента в вашем примере не имеет значения).

У вас объект а - не константный, поэтому все три раза будет вызван метод без const. Если объявите объект константным (A const a;), то будет вызываться константный метод.

Посмотрите, что выведет:

class A
{
public:  
  void func() {Print("Non const");}
  void func() const {Print("Const");}
};

void OnStart()
{
        A a;
        A const b;
        
        a.func();
        b.func();
}
 
Sergei Vladimirov:

Хорошо. )

 Во всех трёх вариантах вызова невозможно понять, по значению или по ссылке передаётся аргумент, потому компилятор и не может выбрать, какую функцию вызывать. А модификатор const их перегружает: void f(){} и void f() const {} - это разные функции. Если в вашем примере объявить один из методов как const, то неопределённость исчезнет: компилятор будет выбирать нужный метод в зависимости от того, из константного объекта происходит вызов или нет (тип аргумента в вашем примере не имеет значения).

У вас объект а - не константный, поэтому все три раза будет вызван метод без const. Если объявите объект константным (A const a;), то будет вызываться константный метод.

Вы бы запустили сначала. Ошибка ТОЛЬКО здесь
const int i2 = 0;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters

Все вызовы до этого проходят без проблем.

Посмотрите, что выведет:

Это из другой оперы.

Причина обращения: