Ни main.cpp
, ни People.h
не определяют std::string
, поэтому компилятор не знает, что это такое.
Вам нужно добавить #include <string>
к People.h
:
#ifndef People_H
#define People_H
#include <string> // <-- add this
class Person{
public:
std::string Name_Input(std::string First_name, std::string Middle_name, std::string Surname);
};
#endif
Общее практическое правило состоит в том, что любой исходный файл, который должен использовать тип, определенный в другом исходном файле, должен #include
этот другой файл (за исключением случаев, когда достаточно использовать предварительные объявления, например, при разрыве круговых ссылок). См. . Хорошая практика - полагаться на транзитивное включение заголовков? . Это означает, что main.cpp
также должен иметь оператор #include <string>
, даже если People.h
(или любой другой заголовок main.cpp
использует) уже имеет свой собственный #include <string>
оператор.
Кроме того, ваше использование из std::string
в main()
неверно. Не включайте имя типа при передаче переменной в метод функции или класса. Используйте имя типа только в объявлении переменной или параметра функции.
Попробуйте вместо этого:
#include <iostream>
#include <string> // <-- add this
#include "People.h"
int main()
{
Person P;
std::string First_name;
std::string Middle_name;
std::string Surname;
...
auto NAME = P.Name_Input(First_name, Middle_name, Surname);
std::cout << NAME << std::endl;
...
return 0;
}