我初学者是C ++,我的代码不是大多数程序员编写代码的方式,因为我只是想在高中学习C ++。 我对运行代码时遇到的特定错误有疑问。 错误是C2665:'std :: to_string':9个重载中没有一个可以转换所有参数类型。
代码是:
for (int j = 1; j <= 7; j++) {
stringValue = std::to_string(myVector[j]);
intValue = atoi(stringValue.c_str());
if (intValue < lowest) {
lowest = intValue;
}
sum = sum + intValue;
}
任何人都可以通过这种方式更正代码,以便将scoreAssign转换为字符串然后转换为整数吗?
整个编码:
std::vector<std::string> myVector;
std::vector<std::string> ID;
std::vector<std::string> assignment;
std::vector<std::string> midterm;
std::vector<std::string> final;
std::vector<std::string> finalAverage;
std::vector<std::string> grade;
ifstream myReadFile;
myReadFile.open("E:/C++/Projects/Textfile project/Textfile project/class_data.txt", ios_base::in);
char output[100];
if (myReadFile.is_open()) {
while (!myReadFile.eof()) {
myReadFile >> output;
char* token = NULL;
char* context = NULL;
char delims[] = " ,\t\n";
token = strtok_s(output, delims, &context);
while (token != NULL)
{
myVector.push_back(token);
token = strtok_s(NULL, delims, &context);
}
}
}
myReadFile.close();
int numOfStudents = (myVector.size() + 1) / 10;
int sum = 0;
int scoreAssign = 0;
int lowest = 100;
int intValue = 0;
std::string stringValue;
for (int x = 0; x < numOfStudents; x++) {
ID.push_back(myVector[0]);
for (int j = 1; j <= 7; j++) {
//stringValue = std::to_string(myVector[j]);
intValue = atoi(myVector[j].c_str());
if (intValue < lowest) {
lowest = intValue;
}
sum = sum + intValue;
}
scoreAssign = (sum - lowest) / 6;
stringValue = std::to_string(scoreAssign);
assignment.push_back(stringValue);
midterm.push_back(myVector[8]);
final.push_back(myVector[9]);
myVector.erase(myVector.begin(), myVector.begin() + 9);
}
for (int i = 0; i < ID.size(); i++) {
std::cout << ID[i] << std::endl;
}
std::cout << "" << std::endl;
for (int i = 0; i < assignment.size(); i++) {
std::cout << assignment[i] << std::endl;
}
std::cout << "" << std::endl;
for (int i = 0; i < midterm.size(); i++) {
std::cout << midterm[i] << std::endl;
}
std::cout << "" << std::endl;
for (int i = 0; i < final.size(); i++) {
std::cout << final[i] << std::endl;
}
}
答案 0 :(得分:4)
你不能&#34;只是&#34; stringify矢量。预期的格式是什么?
添加onverload:
template <typename T>
std::string to_string(std::vector<T> const& v, const char* delim = "\n")
{
std::ostringstream oss;
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(oss, delim));
return oss.str();
}
完整示例 Live On Coliru
#include <vector>
#include <algorithm>
#include <string>
#include <iterator>
#include <sstream>
#include <iostream>
template <typename T>
std::string to_string(std::vector<T> const& v, const char* delim = "\n")
{
std::ostringstream oss;
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(oss, delim));
return oss.str();
}
int main()
{
std::cout << to_string(std::vector<double> { 1.1,2.2,3e-12 }, ";") << "\n";
std::cout << to_string(std::vector<int> { 42, -13 }, "\t") << "\n";
std::cout << to_string(std::vector<std::string> { "42", "-13" }) << "\n";
}
我选择了一个随意的&#39;格式。你可以根据自己的意愿调整它。