当我编译我继续生成失败?我正在使用Xcode

时间:2015-11-30 02:50:34

标签: c++ xcode

我不知道为什么这不起作用。我不知道它是否与通过函数或我创建变量的方式有关。但是我必须使用toDigit功能来完成我的作业。

#include <iostream>
#include <fstream>
using namespace std;

int toDigit(char &);

int main(){
    int number;
    char isbn;

    ifstream inputFile;
    inputFile.open("numbers.txt");

    while (inputFile >> isbn) {
        number = toDigit(isbn);
        cout << number << endl;
    }
    inputFile.close();
    return 0;
}

int toDigit(char ch){
    return ch - '0';
}

1 个答案:

答案 0 :(得分:1)

最初,您声明toDigit为

 int toDigit(char &);

将被读取为:一个函数返回一个int,它将一个参数一个引用带到一个char。

然后,您将在以后定义此函数:

int toDigit(char ch){
    return ch - '0';
}

可以像这样读取:一个函数返回一个带有一个char参数的int。

你看到了区别吗?提示:参考

在c ++中,定义需要与声明相同,因此您需要使它们相同。

或者:

发表声明

 int toDigit(char );
 //               ^^ no &

OR

制定定义

int toDigit(char & ch){
//               ^^ & added
    return ch - '0';
}

在这种情况下,第一个选项更有意义,因为你不需要读取访问权限,字符和字符复制效率很高,所以副本就可以了。