2013-06-18 60 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

錯誤:無法將'(const char *)'test''從'const char *'轉換爲'Version' – Kam

+2

嘗試'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'是字符串的長度。 – 2013-06-18 17:50:32