• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

  • Автор темы Normann
  • Дата начала
N

Normann

Код:
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

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

Normann

Да, но почему такая разница, и какой компилятор скомпилировал правельнее?

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

European

Есть такое правило, что если переопределен копирующий конструктор, то необходимо реализовывать и оператор присваивания.

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

Note: if a class X only has a copy constructor with a parameter of type X&, an initializer of type const X or volatile X cannot initialize an object of type (possibily cv-qualified) X. Example:
struct X {
X(); //default constructor
X(X&); //copy constructor with a nonconst parameter
};

const X cx;
X x = cx; // error – X::X(X&) cannot copy cx into x
 
N

Normann

Параметр конструктора копирования сделал константным, заработало без проблем. Но блин, не могу врубиться как конструктор копирования и конструктор для преобразования (int) конфликтуют между собой когда объект инициализируется int типом.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!