1

我在下面的代码中需要帮助,希望你能帮助我完成。我想要的只是将 INT 类型传递给 setX() 和 setY()。但是,我无法将向量 char* 转换为 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: error: no matching function for call to 'Point2D::setX(std::basic_string&)'</p>

4

3 回答 3

1

有很多方法可以将字符串转换为 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()返回 avector<string>并且您将这些字符串之一提供给setX()and 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++ 中,数组和向量元素从 0而不是1 开始,所以你可能想分别用fileDataAfterFiltered[0]and替换它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 回答