“返回值类型与函数类型不匹配”和其他 VS 编译错误

新手上路,请多包涵

几天前我开始学习 C++,现在我正在尝试制作我的第一个程序,一个“电话簿”应用程序。我认识的人的名字会出现,我会输入我需要号码的人的名字,他们的号码就会出现。

但是现在我调试了一段时间,我仍然不明白我的代码有什么问题!我很确定这很明显,但我太新了,无法理解。

     #include <stdafx.h> // Visual Studio users need to uncomment this line
    #include <iostream>

    int nameAppears()
 {
    std::cout << "Alex" <<    std::endl;
    std::cout << "Andre" << std::endl;
    std::cout << "Guy" <<   std::endl;
    std::cout << "Grand-ma" <<        std::endl;
    std::cout << "Grand-pa" <<        std::endl;
    std::cout << "Jérémy" <<  std::endl;
    std::cout << "Manon" <<   std::endl;
    std::cout << "Nathalie" <<  std::endl;
    std::cout << "Stéphanie" << std::endl;
    std::cout << "Oliver" << std::endl;
}

int enterName()
{
    std::cout << "Enter the name you wish to obtain the number:";
    int name;
    std::cin >> name;
    return name;
}

int link(name)
{
    if (name == "Alex")
        return "586 6532";
    if (name == "Andre")
        return "569 8522";
    if (name == "Guy")
        return "850 6589";
    if (name == "Grand-ma")
        return "482 4875";
    if (name == "Grand-pa")
        return "453 9963";
    if (name == "Jérémy")
        return "654 3828";
    if (name == "Manon")
        return "965 4541";
    if (name == "Nathalie")
        return "770 6916";
    if (name == "Stéphanie")
        return "546 5482 ";
    if (name == "Oliver")
        return "246 5554";
}

int printNumber (int number)
{
    std::cout << "The number is: " << number << std::endl;
}

int main()
{
    //Make all the names appear
    nameAppears();

    //Get User's input
    int name = enterName();

    //Link Name to number
    int number = link(name);

    //Print the desired number
    printNumber(number);
}

这是我在 Visual Studio 2013 上编译时遇到的所有错误的列表:

  • “无法打开源文件“stdafx.h””
  • “标识符“名称”未定义”(连续 2 次)
  • “返回值类型与函数类型不匹配”(连续10次)
  • “”名称“:未声明的标识符”
  • ”“link: function-style initializer 似乎是一个函数定义”
  • “术语不评估为带 1 个参数的函数”

原文由 Birdy McBirdFace 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.3k
2 个回答

从哪儿开始?

1. 为什么名字应该是数字?

在您的功能中:

 int enterName()
{
    std::cout << "Enter the name you wish to obtain the number:";
    int name;
    std::cin >> name;
    return name;
}

用户应该插入一个 _名称_,但 name 变量的类型已声明为 int (这是 整数 类型)。我现在的问题是: 为什么一个人的名字应该编成一个数字?

如何解决这个问题?

只需使用 字符串 类型。

 #include <string>  // You have to include this header to use string object

// ...

std::string enterName()
{
    std::cout << "Enter the name you wish to obtain the number:";
    std::string name;
    std::cin >> name;
    return name;
}

注意:关于如何从标准输入中获取字符串有很多考虑,但我不是你的 c++ 老师,在你的情况下,我认为这个论点现在离你的技能还很远。

2. C++ 是静态类型语言( _或多或少_)。

另一个问题在这里:

 int link(name)
{
  // do something ...
}

在您的声明函数中 name 没有类型。这是一个错误!变量必须具有类型作为参数。

此外,您的 body 函数返回一个“ _字符串_”类型:

 return "965 4541";  // return a const char[]

那么为什么你声明你的函数返回一个 int 类型?

正确的形式:

 std::string link(const std::string& name)  // declaration signature

3. 又…

即使在这个函数中,类型也是错误的:

 int printNumber (int number)
{
    std::cout << "The number is: " << number << std::endl;
}

它应该是:

 void printNumber (const std::string& number)
{
    std::cout << "The number is: " << number << std::endl;
}

void 作为返回类型,因为您的函数不返回任何内容。

最终结论

我发现您缺乏有关该语言的基本技能。我建议你学习一本好的 C++ 书籍,然后从那里开始编码。

原文由 BiagioF 发布,翻译遵循 CC BY-SA 4.0 许可协议

  1. “标识符”名称“未定义”您没有在函数链接中声明变量名称,正确的是 int main (string name) ,您需要 string

  2. “返回值类型与函数类型不匹配”以函数 int link(string name) 为例,如果您想返回电话号码,或者像 8506589(无空格)一样返回,或者将返回类型更改为字符串所以它考虑一个字符串并接受 - 或空格之类的东西。

3- 不需要 stdafx 标头,删除此行并在谷歌上搜索以了解更多信息。

4-您将名称声明为 int,您应该将其声明为字符串。

伙计,你的代码有很多问题,你应该考虑去看一些 youtube 视频,如果你想自学并先看一些 c 编程视频,试试 newboston 视频……我只帮助了你的一些错误。

原文由 user3183671 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题