【问题标题】:std_lib_facilities.h C++ error while compiling exercise编译练习时出现 std_lib_facilities.h C++ 错误
【发布时间】:2016-01-10 03:04:56
【问题描述】:

我正在尝试为 Bjarne Stroustrup 编写的Programming Principles and Practice Using C++一书中的练习编写一个程序,该程序应该是一个名为 Bulls and Cows 的小游戏,用户可以在其中尝试猜一个四位数的数字。这是我到目前为止的代码:

#include "../Library/std_lib_facilities.h"

class string_error{};

/*
 * Method to determine if an integer is
 * in a vector
 */
bool contains(vector<int> v,int k ){

}

int string_to_int(string s){
    if(s == "0") return 0;
    else if(s == "1")return 1;
    else if(s == "2")return 2;
    else if(s == "3")return 3;
    else if(s == "4")return 4;
    else if(s == "5")return 5;
    else if(s == "6")return 6;
    else if(s == "7")return 7;
    else if(s == "8")return 8;
    else if(s == "9")return 9;
    else throw string_error();
}

int main(){

    /*
     * There is an int vector with the numbers
     * of the answer in it
     *
     * There is also an int vector with the numbers
     * of the user's guess
     *
     * User inputs a four digit integer that is read as
     * a string called str_guess
     *
     * for each digit in the guess string the digit is
     * converted to an integer and added to the guess vector
     *
     * The guess vector is then run through for each digit in the vector
     * each digit is checked against the answer at the same index
     * if the digit in the answer at that index number is not the same as the
     * digit in the guess vector then the digit is checked if the answer
     * vector contains it at all
     *
     * for each number that is correct for both the value and position
     * 1 is added to the bull value
     * for each number that is within the answer value but not in the correct position
     * 1 is added to the cow value
     *
     * The bull and cow values are displayed after the user enters their guess
     *
     * The user is prompted for a guess until their guess returns 4 bulls
     */

    vector<int> answer;
    answer.push_back(7);
    answer.push_back(9);
    answer.push_back(2);
    answer.push_back(4);

    string str_guess = "";
    cout << "Enter a four digit integer as a guess";
    cin >> str_guess;
    vector<int> guess;
    for(int i = 0; i < 4; i++){
        int guess_digit = string_to_int(str_guess[i]);
        guess.push_back(guess_digit);
    }
    cout << "Length of guess vector: " + guess.size();



}

如您所见,我正在使用 Mr.Stroustrup 的头文件 std_lib_facilities.h(here) 不幸的是,每当我尝试编译我的程序时,都会收到此错误:

In file included from ../Bulls_and_Cows.cpp:13:
../../Library/std_lib_facilities.h:106:38: error: no matching constructor for initialization of 'std::string' (aka 'basic_string<char, char_traits<char>, allocator<char> >')
        template<class S> String(S s) :std::string(s) {}

我在使用 eclipse 和 mac os gcc 编译器的 mac 上。您能为我提供的任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: c++ macos


    【解决方案1】:

    你的函数string_to_int 接收一个字符串,你传递一个字符

    int guess_digit = string_to_int(str_guess[i]);
    //                                       ^^^ access a position of the string that is a char
    

    【讨论】:

    • 另一个问题,由于某种原因,当我尝试实例化向量答案(或任何其他向量)时,当我尝试使用列表格式时会返回错误。例如。 vector answer = {7,9,2,4} 不起作用。你有什么猜测吗?
    • 这是一种 C++11 语法,通过初始化列表构造对象。要使用它,您需要在编译时设置标志 -std=c++11。例如。 g++ -std=c++11 -o main main.cpp。如果您使用的是 IDE,请查看编译器设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多