2013-06-18 2 views
1

Я определил классавтоматическое преобразование из строки в MyClass

class Version 
{ 
public: 
     Version(std::string versionStr) 
     { 
      //do something 
     } 
} 

Я хочу, чтобы иметь возможность использовать его как следовать

void foo(Version v1) {//do somthing}; 
void main() 
{ 
    foo("test"); 
} 

Я хотел бы, что v1 становится объектом, как будто у меня есть сделано:

void main() 
{ 
    Version v1("test"); 
    foo(v1); 
}  

это возможно?

+0

То, что вы должны работать. Какие ошибки вы получаете? – andre

+0

error: невозможно преобразовать '(const char *) "test"' from 'const char *' в 'Version' – Kam

+2

try 'foo (std :: string (" test "));' или создать конструктор 'Version (const char *) '. в основном, он говорит вам, что '' test "' не относится к типу 'std :: string'. – andre

ответ

2

Код у вас слишком много уровней неявной конструкции. "string literal" имеет тип const char [] и неstd::string. Только один уровень неявной конструкции происходит автоматически. Попробуйте добавить конструктор, который принимает const char * вместо:

class Version { 
    // ... 
    Version(const char *_vstr) : versionStr(_vstr) {} 
    // ... 
} 

Live demo.

+0

Я слышал, что перегруженный оператор конверсии из строки в Версию может выполнять эту работу. Но я не мог найти эту информацию нигде. Я ошибаюсь в этой концепции? – Kam

+0

@kam Вы правы, но '' test '' не является 'std :: string', это' const char * ' – andre

+0

@andre Нет, это не' const char * ', а' const char [N + 1] 'где' N' - длина строки. –