1

次のコードで助けが必要です。あなたが私を助けてくれることを願っています。私が欲しかったのは、INT型をsetX()とsetY()に渡すことだけです。ただし、vectorchar*をintに変換する方法はありません。これに代わるものはありますか?

template<class T>
vector<string> Delimiter(T inputString){
    int count=0;
    char str[inputString.length()];
    strcpy(str,inputString.c_str());
    char * pch;

    vector<string> returnContainer;

    printf ("Splitting string \"%s\" into tokens:\n",str);
    pch = strtok (str,",[]");
    while (pch != NULL)
    {
        returnContainer.push_back(pch);
        pch = strtok (NULL, " ,[]");
        count++;
    }
    for(int i=0; i<returnContainer.size(); i++){
    cout << "return:" << returnContainer[i] << endl;
    }
    return returnContainer;
}

//主要()

fileDataAfterFiltered = Delimiter(fileData[i]); // Delimiter (vector<string> type)

point2DObj[point2DCount].setX(fileDataAfterFiltered[1]); // error
point2DObj[point2DCount].setY(fileDataAfterFiltered[2]); // error

//Assn3.cpp:107:59:エラー:「Point2D :: setX(std :: basic_string&)」の呼び出しに一致する関数がありません</ p>

4

3 に答える 3

1

stringをintに変換する方法はたくさんあります。boost :: lexical_castは、必要な変換を魔法のように実行するものです。それ以外の場合は、atoi(エラーを気にしない場合)またはstrtol(使用する場合)を使用できます。

point2DObj[point2DCount].setX(atoi(fileDataAfterFiltered[1].c_str()));
point2DObj[point2DCount].setX(boost::lexical_cast<int>(fileDataAfterFiltered[1]));
于 2012-11-15T11:39:40.430 に答える
1

Delimiter()aを返し、vector<string>これらの文字列の1つをsetX()setY()に指定しますが、どちらも整数パラメーターを必要とします。文字列をintに変換する必要があります

int x = atoi(fileDataAfterFiltered[1].c_str());
point2DObj[point2DCount].setX(x);
int y = atoi(fileDataAfterFiltered[2].c_str());
point2DObj[point2DCount].setY(y);

ただし、C ++では、配列要素とベクトル要素は1ではなく0から始まるため、これをそれぞれとに置き換えることができfileDataAfterFiltered[0]ますfileDataAfterFiltered[1]

于 2012-11-15T11:40:01.570 に答える
1

C ++ 11コンパイラを使用している場合、関数std::stoi()は次のトリックを実行します。

point2DObj[point2DCount].setX(std::stoi(fileDataAfterFiltered[1]));

それ以外の場合は、古いものを使用できますatoi()

point2DObj[point2DCount].setX(atoi(fileDataAfterFiltered[1].c_str()));

これ以外にも、コードには多くの問題がありますが、自分で修正できることを願っています。

于 2012-11-15T11:40:20.177 に答える