В этом примере компилятор сообщает, что функция 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;
}
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);
void list(vector<string> things);
не то же самое, что void list()
. Вам действительно нужно определить вашу функцию как void list(vector<string> things)
, а не только как прототип.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .