Некорректно работает перегрузка оператора
От: malina  
Дата: 12.05.03 06:00
Оценка:
Есть код (пишу на C++Buildep 5): Worksheet->Get_Range("A1", "B2")->set_Value(int(2));
Он вызывает такой код (лежащий в UTILCLS.H — COM/ActiveX Utility Classes):

TVariantT& operator =(const TBaseVariantT<T>& rhs)
  {
    if (&rhs != this)
    {
      ::VariantClear(this);
      ::VariantCopy(this, &(const_cast<TVariantT&>(rhs))); (здесь стопорится)
    }
    return *this;
  }


с ошибкой Cannot cast from ... to ...
Вопрос: почему вызывается именно этот вариант перегруженного оператора, если ДАЛЬШЕ написано

TVariantT& operator =(int src)
  {
    ::VariantClear(this);
    SET_VTYPE_AND_VAR(I4, src);
    return *this;
  }



Комментирую первый вариант перегрузки — ВСЕ компиляется. Почему не вызывается тот перегруженный оператор, который действительно соответствует типу параметра?!

Исправлена подсветка синтаксиса. -- ПК.
Re: Некорректно работает перегрузка оператора
От: Аноним  
Дата: 12.05.03 07:13
Оценка:
Так ты бы показал код, в котором происходит присваивание и еще типы операндов, а то что-то трудно понять, о чем ты. Да, есть два оператора присваивания. Но код то в котором присваивается, где?
Re[2]: Некорректно работает перегрузка оператора
От: malina  
Дата: 12.05.03 07:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Так ты бы показал код, в котором происходит присваивание и еще типы операндов, а то что-то трудно понять, о чем ты. Да, есть два оператора присваивания. Но код то в котором присваивается, где?


Вот код: Worksheet->Get_Range("A1","B2")->set_Value( int(12345) ); , который кладет в ячейку экселевской таблицы какое-нибудь значение. При его выполнении запускается код

TVariantT& operator =(const TBaseVariantT<T>& rhs)
  {
    if (&rhs != this)
    {
      ::VariantClear(this);
      ::VariantCopy(this, &(const_cast<TVariantT&>(rhs)));
    }
    return *this;
  }


, который лежит в билдеровских исходниках.
Оператор присваивания переопределен для всех встроенных типов и еще для некоторых. Однако, для целочисленного параметра метода set_Value( int(12345) ) почему-то код, который я указал чуть выше, а не тот, который предназначен для работы с целочисленным параметром. Вот и проблема. Такое вообще почему бывает?

Исправлена подсветка синтаксиса. -- ПК.
Re[3]: Некорректно работает перегрузка оператора
От: Аноним  
Дата: 12.05.03 07:38
Оценка:
M>Вот код: Worksheet->Get_Range("A1","B2")->set_Value( int(12345) ); , который
Хорошо. Тогда теперь посмотри, что происходит в set_Value. Что там чему присваивается?
Литерал 12345 и так имеет тип инт, приводить его не надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.