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);

} 

ベクターから文字列にアクセスしようとすると、次のエラーが発生します。

std::basic_string<char>からへの実行可能な変換はありませんconst char *

ここに画像の説明を入力

このベクトルから文字列を取得するにはどうすればよいですか?

4

1 に答える 1

4

この行では、

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

の代わりにcloudsImages[i]、 を使用しますcloudsImages[i].c_str()。.c_str() が返す const char* が必要です。

だからあなたのラインは

cocos2d:: CCSprite *cloudImage = CCSprite::spriteWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(雲画像[i].c_str()));

C++ の文字列は、C スタイルの文字列とは少し異なります。C では、文字列は単なる文字の配列であり、ヌル文字 '\0' で終了します。charたとえば、文字列 "Hello" は、長さ 6 (char各文字に 1、'\0' に 1)の ' の配列で表されます。

C++ では、stringクラスはこの基本配列のラッパーです。ラッパーを使用すると、文字列に対して操作を実行できます (たとえば、2 つの文字列の比較、ある文字列を別の文字列に置き換えるなど)。このクラスには、文字を保持するためだけに使用される C スタイルの文字列が含まれています。

関数は C スタイルの文字列を想定しています。C++ 文字列から取得するには、文字列クラスのメンバーである c_str() 関数を使用します。

于 2013-03-30T08:00:17.053 に答える