Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Конструктор для преобразования в Dev-cpp и Ms Visual C++
Форум программистов > Системное программирование > C, С++ и С Builder > Общие вопросы по С и С++
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

Почему? Исправно ли это?
European
Цитата(Normann @ 12:08:2008 - 14:01) *
Почему?

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

Еще интересно то что obj1 = 9 в Dev-Cpp интерпретировался без проблем.
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
Normann
Параметр конструктора копирования сделал константным, заработало без проблем. Но блин, не могу врубиться как конструктор копирования и конструктор для преобразования (int) конфликтуют между собой когда объект инициализируется int типом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.