С момента использования string
как
std::string _name;
//^^^^^^^^^ concrete member
понадобится вся структура string
, поэтому необходимо объявление. Вы должны #include <string>
.
Объявление string
можно опустить, если вы напишите, например,
std::string* _name;
//^^^^^^^^^^ pointer or reference
, который вы могли бы использовать для предварительного объявления, но я все же рекомендую вам , а не , чтобы сделать это, потому что std::string
не простой тип структуры, такой как Person или Student, а очень сложный тип, включающий множество шаблонов :
template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> >
class basic_string { ... };
typedef basic_string<char> string;
Если вы передадите декларацию неправильно (например, class string;
), компиляция завершится неудачно, когда вы действительно ее используете из-за конфликтующего типа.