В этом примере компилятор сообщает, что функция list не имеет определения, хотя я написал его ниже. Если я перемещу определение функции наверх, чтобы не было прототипа, оно компилируется нормально.

Может кто-нибудь объяснить, что здесь происходит?

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <vector>

    using namespace std;

    void stuff();
    void list(vector<string> things);

    bool alive = true;

    int main()

    {
       vector<string> things;
       things.push_back("Lots");
       things.push_back("Of");
       things.push_back("Things");

       do
       {
         cout << "What do you want to do?\n\n" << endl;
         string input;
         cin >> input;

         if (input == "stuff")
         {
            stuff();
         }
         if (input == "list")
         {
            list();
         }
       } while (alive);

       return 0;
     }

   void list()
     {
       cout << "The things are:\n\n";
       for (int i = 0; i < things.size(); ++i)
       {
         cout << things[i] << endl;
       }
     }

    void stuff()
     {
       cout << "Some stuff" << endl;
     }
-1
MrSteve 1 Янв 2018 в 04:48

2 ответа

Лучший ответ

Ваша подпись list определения функции отличается от вашей объявление функции. Сигнатура функции должна быть такой же. Сигнатура определения вашей функции также должна принимать один параметр:

void list(std::vector<string> things)
{
    std::cout << "The things are:\n\n";
    for (int i = 0; i < things.size(); ++i)
    {
        std::cout << things[i] << '\n';
    }
}

И в своей программе вы вызываете функцию с помощью:

list();

Где это должно быть:

list(things);
0
Ron 1 Янв 2018 в 02:00

void list(vector<string> things); не то же самое, что void list(). Вам действительно нужно определить вашу функцию как void list(vector<string> things), а не только как прототип.

0
Jarra McIntyre 1 Янв 2018 в 01:53