Конструктор для преобразования в Dev-cpp и Ms Visual C++

Тема в разделе "Общие вопросы по С и С++", создана пользователем Normann, 12 авг 2008.

  1. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Код (Text):
    class MyClass
    {
    ...
    MyClass();
    MyClass(MyClass&);
    MyClass(int);
    ...
    };

    void OnButton1(void)
    {
    MyClass obj1 = 9;
    };
    В MS Visual C++ компилируется и выполняется без ошибок и предупреждений, а в Dev-Cpp выводит вот такую ошибку:
    In function `void OnButton1()':
    no matching function for call to `MyClass::MyClass(MyClass)'
    candidates are: MyClass::MyClass(int)
    MyClass::MyClass(MyClass&)
    initializing temporary from result of `MyClass::MyClass(int)'
    [Build Error] [ButtonsClick.o] Error 1

    Почему? Исправно ли это?
     
  2. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    неявное преобразование типов. Вызывайте явно конструктор и не будет лишней головной боли... Да и эффективность выше
     
  3. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Да, но почему такая разница, и какой компилятор скомпилировал правельнее?

    Еще интересно то что obj1 = 9 в Dev-Cpp интерпретировался без проблем.
     
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Есть такое правило, что если переопределен копирующий конструктор, то необходимо реализовывать и оператор присваивания.

    Фича в том что ваш констуктор копирования принимает неконстантную ссылку. Вот вам цитата из стандарта:

     
  5. Normann

    Normann Well-Known Member

    Регистрация:
    9 авг 2007
    Сообщения:
    168
    Симпатии:
    2
    Параметр конструктора копирования сделал константным, заработало без проблем. Но блин, не могу врубиться как конструктор копирования и конструктор для преобразования (int) конфликтуют между собой когда объект инициализируется int типом.
     
Загрузка...

Поделиться этой страницей