1. ホーム
  2. c++

[解決済み] "戻り値の型が関数の型と一致しない "などのVSコンパイルエラーが発生する。

2022-02-08 12:31:38

質問

数日前からC++を学び始め、今、初めてのプログラム、"phone-book"アプリを作ろうとしているところです。知り合いの名前が表示され、番号が必要な人の名前を入力すると、その人の番号が表示されます。

しかし、今、しばらくデバッグしていますが、私のコードのどこが悪いのか、まだわかっていません しかし、今しばらくデバッグしているのですが、私のコードのどこがおかしいのか、まだわかりません!明らかなことだと思うのですが、私が新しすぎて、それを理解できていないだけなのです。

    #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"" を開くことができません。
  • 識別子 "name" が未定義です" (2回連続)
  • 戻り値の型が関数の型と一致しない" (10回連続)
  • ""name": 宣言されていない識別子"
  • ""link: 関数型イニシャライザは関数定義のように見えます"
  • "項が1つの引数を取る関数として評価されない"

どのように解決するのですか?

どこから始めるか?

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 というのは、この関数は何も返さないので、return type として。

最終結論

言語に関する基本的なスキルが不足しているようですね。良いC++の本を勉強して、そこからコーディングを始めることをお勧めします。