2013-03-30 63 views
0

我卡在如何從向量中檢索字符串。我的代碼如下。從向量回溯字符串

在我.h文件:

vector<string>cloudsImages; 
.m文件

cloudsImages = FileOperation::readFile(); 

for (int i = 0; i < cloudsImages.size(); i++) { 

    cocos2d:: CCSprite *cloudImage = CCSprite::spriteWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(cloudsImages[i])); 
    cloudImage -> setTag(1); 
    CCSize winSize = CCDirector::sharedDirector()->getWinSize(); 
    cloudImage->setPosition(ccp(i,winSize.height/2)); 
    this -> addChild(cloudImage); 

} 

當試圖從向量我收到以下錯誤訪問一個字符串:

No viable conversion from std::basic_string<char> to const char *

enter image description here

如何從此矢量檢索字符串?

回答

4

在這一行,

cocos2d:: CCSprite *cloudImage = CCSprite::spriteWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(cloudsImages[i]));

相反的cloudsImages[i],使用cloudsImages[i].c_str()。它期望一個const char *,它是.c_str()返回的內容。

所以你的線變得

cocos2d:: CCSprite *cloudImage = CCSprite::spriteWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(cloudsImages [I] .c_str()));

在C A字符串++是從C風格串稍有不同。在C中,一個字符串只是一個由空字符'\ 0'結尾的字符數組。例如,長度爲6的char'(每個字符爲1 char,'1'爲'\ 0')表示的字符串「Hello」。

在C++中,string類是這個基本數組的一個包裝。包裝器允許您對字符串執行操作(例如比較兩個字符串,用另一個字符串替換一個字符串等)。類包含一個C風格的字符串,它只是用來容納字符。

你的函數需要一個C風格的字符串。要從C++字符串中獲取它,可以使用c_str()函數,該函數是字符串類的成員。

+0

很好的答案!它也可以通過解釋'std :: basic_string '和'const char *'之間的區別來改進。 –

+0

@maditya,我如何追加.png文本到cloudsImages [i] .c_str()字符串? – Tirth

+0

您可以獲取原始字符串,然後使用'+'向其添加內容。例如, 'std :: string name = cloudsImages [i] +「.png」; CCSprite :: spriteWithSpriteFrame(CCSpriteFrameCache :: sharedSpriteFrameCache() - > spriteFrameByName(name.c_str());' – maditya