конструкторы и преобразования
От: Gosha Украина  
Дата: 24.07.02 17:35
Оценка:
Всем привет!

Вот, хотел сделать что-то типа вот этого:
#include "stdafx.h"
#include <string>
using namespace std;

class SOME
{
public:
    SOME(string str=""):m_Str(str){}
    virtual ~SOME(){}
private:
    string m_Str;
};

class ANOTHER
{
public:
    ANOTHER(){}
    virtual ~ANOTHER(){}
    void SetSome(SOME some){m_Some=some;}
private:
    SOME m_Some;
};

int main(int argc, char* argv[])
{
    printf("Hello World!\n");

    ANOTHER an1;
    
    //если так...
    an1.SetSome("hello!");
    //то компилятор ругается:
    //error C2664: 'SetSome' : cannot convert parameter 1 from 'char [7]' to 'class SOME'
    //No constructor could take the source type, or constructor overload resolution was ambiguous

    //а вот так...
    an1.SetSome(string("hello!"));
    //уже работает, хотя передаем в качестве аргумента все равно
    //НЕ объект типа SOME, но тут он уже соображает его создать

    return 0;
}


Внесите, плз, ясность. Это только со string-ом и char-ом так, или есть какое-то фиксированное число... "вложенностей" что-ли при таких вот неявных преобразованиях, или как это назвать даже не знаю
Вообщем-то, оно не напрягает, но вроде как первый (нерабочий) вариант удобнее, и на этапе отладки, да и потом тоже, из виндовых функций сразу char* забирать... Или придется еще один конструктор для SOME писать? Или можно как-то по другому выкрутится?
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.