如何更正有关std :: to_string的特定错误?

时间:2014-03-21 21:20:34

标签: c++ string vector

我初学者是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;
    }
    }

1 个答案:

答案 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;格式。你可以根据自己的意愿调整它。