Ошибка namespace std что это

Причина ошибки заключается в том, что данный компилятор проверяет имя, используемое в директиве using: определено оно или нет.

Когда перед директивой включен заголовок, то, похоже этот заголовок определяет имя std, например, следующим образом

#if defined( __cplusplus )
namespace std
{

и поэтому директива, следующая после заголовка, может на него ссылаться.

Когда же заголовок не включен, то получается, что имя std не определено, и использование его в using директиве компилятор рассматривает как ошибку.

AKE

12 / 12 / 3

Регистрация: 09.05.2010

Сообщений: 384

1

14.05.2010, 00:16. Показов 29923. Ответов 17

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

C++
1
2
3
4
5
6
7
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
#include "stdafx.h"
#include "iostream.h"
using namespace std; //здесь ошибка

error C2871: ‘std’ : does not exist or is not a namespace

Microsoft VC++ 6.0



0



бжни

2473 / 1684 / 135

Регистрация: 14.05.2009

Сообщений: 7,162

14.05.2010, 00:24

2

вы должные включить заголовки, которые чтонибудь туда добавят, например #include <vector> #include <iostream>



0



12 / 12 / 3

Регистрация: 09.05.2010

Сообщений: 384

14.05.2010, 00:27

 [ТС]

3

alex_x_x
А мне не нужно ничего туда добавлять…
Ошибка с потоковыми файлами…



0



229 / 67 / 11

Регистрация: 02.06.2009

Сообщений: 280

14.05.2010, 12:35

4

.h убери в iostream



0



Эксперт JavaЭксперт С++

8381 / 3613 / 419

Регистрация: 03.07.2009

Сообщений: 10,708

14.05.2010, 21:22

5

AKE, в зависимости от того как вы создавали проект, вам может не понадобится std;
MS VC++ 6 позволяет как использовать, так и не использовать std



0



Эксперт CАвтор FAQ

21265 / 8281 / 637

Регистрация: 30.03.2009

Сообщений: 22,646

Записей в блоге: 30

15.05.2010, 08:47

6

Цитата
Сообщение от AKE
Посмотреть сообщение

error C2871: ‘std’ : does not exist or is not a namespace

namespace std появилось только в более поздних версиях стандарта Си++ и предназначен для того, чтобы втащить в него всё то, что описано в стандарте Си++ (чтобы проще было отделять мух от котлет). А в старых версиях стандарта (и, соответственно, в старых версиях компиляторах) этого namespace’а не было вообще.

К тому же раньше все заголовочные файлы от стандартных библиотек Си++ имели расширение .h: т.е. нужно было писать, например, #include <iostream.h>. В новых стандартах вся стандартная поддержка языка Си++ описана в заголовочных файлах без расширений: т.е. теперь надо писать #include <iostream>, но потом добавлять using namespace std; (либо ко всем глобалам обращаться через std, типа std::cout). Большинство современных компиляторов для совместимости поддерживают в том числе и старый вариант. Но в старых компиляторах нового варианта нет (потому что в те времена его ещё не изобрели).

Поэтому в твоём случае нужно просто удалить строку «using namespace std;» (поскольку ты использовал файл с расширением .h). Либо все подключаемые файлы стандартной библиотеки Си++ должны быть без .h (в твоём случае вместо iostream.h должно быть iostream)



2



-=ЮрА=-

Заблокирован

Автор FAQ

05.01.2012, 23:17

7

Evg, чисто для себя хочу узнать — здесь на форуме часто вижу std::cout и т.д.(и все с пеной у рта утверждают что без std:: не по стандарту)
В случае если использую только функции std;(обычная консоль) логичней и лаконичней для кода записать using namespace std; под хедерами и не загромождать код std:: или я не прав???



0



Эксперт С++

3211 / 1459 / 73

Регистрация: 09.08.2009

Сообщений: 3,441

Записей в блоге: 2

05.01.2012, 23:37

8

-=ЮрА=-, раскрытие пространства имен, весьма опасная привычка. это годится для хеловордов, или же для программ не использующих ничего кроме стандартной библиотеки.



0



Эксперт CАвтор FAQ

21265 / 8281 / 637

Регистрация: 30.03.2009

Сообщений: 22,646

Записей в блоге: 30

06.01.2012, 00:28

9

-=ЮрА=-, ну, например, ты можешь написать проект с 100500 функциями и называть их «a», «b», «c», … — это будет по стандарту, но затруднит тебе жизнь. С std:: то же самое. Если это «домашняя» программа на два экрана — то проще using использовать, в противном случае лучше std::. Да и вообще лучше заранее приучать себя к тому, что является «правильным» в случаях, когда большой проект пишут несколько людей



1



Gepar

1186 / 542 / 78

Регистрация: 01.07.2009

Сообщений: 3,517

06.01.2012, 00:45

10

AKE, дело в том что написав
include «iostream.h» Вы уже подключили iostream с указанием что потоки cin, cout а также манипуляторы вроде endl принадлежат пространству имён std, тем не менее хотя строка

C++
1
using namespace std;

в вашем случае пользы не принесёт, проект и с ней должен нормально компилироваться, что и происходит в minigw, но почему-то не происходит в vs 6.0 (сам вот тоже проверил из интереса).
Но если подключить iostream в виде

C++
1
#include <iostream>

то тогда конфликтов у vs с пространствами имён не возникает так что либо пишите так либо не пишите using namespace std раз уж таким образом подключили нужные вам библиотеки.



0



Эксперт CАвтор FAQ

21265 / 8281 / 637

Регистрация: 30.03.2009

Сообщений: 22,646

Записей в блоге: 30

06.01.2012, 01:01

11

Для полноты картину ещё и сюда ссылку закину: include <?> для cout



0



бжни

2473 / 1684 / 135

Регистрация: 14.05.2009

Сообщений: 7,162

09.01.2012, 14:52

12

вообще это вопрос холивара, а не языка



0



0 / 0 / 0

Регистрация: 26.09.2012

Сообщений: 38

11.11.2012, 23:38

13

Цитата
Сообщение от Evg
Посмотреть сообщение

-=ЮрА=-, ну, например, ты можешь написать проект с 100500 функциями и называть их «a», «b», «c», … — это будет по стандарту, но затруднит тебе жизнь. С std:: то же самое. Если это «домашняя» программа на два экрана — то проще using использовать, в противном случае лучше std::. Да и вообще лучше заранее приучать себя к тому, что является «правильным» в случаях, когда большой проект пишут несколько людей

Можно пример (желательно для новичка) в котором using namespace std; может повредить программе ?



0



бжни

2473 / 1684 / 135

Регистрация: 14.05.2009

Сообщений: 7,162

11.11.2012, 23:56

14

Цитата
Сообщение от Alejo
Посмотреть сообщение

Можно пример (желательно для новичка) в котором using namespace std; может повредить программе ?

LinkedList list;



0



Croessmah

Неэпический

17815 / 10586 / 2044

Регистрация: 27.09.2012

Сообщений: 26,631

Записей в блоге: 1

12.11.2012, 00:01

15

Цитата
Сообщение от Alejo
Посмотреть сообщение

может повредить программе ?

как вариант:

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
using namespace std;
 
bool nothrow;
int main(){
    nothrow=true;
    std::cin.get();
    return 0;
}



0



0 / 0 / 0

Регистрация: 26.09.2012

Сообщений: 38

12.11.2012, 00:53

16

CroessmahПоясните, что здесь не верно ? К nothrow будет применяться std ?



0



424 / 389 / 113

Регистрация: 21.09.2012

Сообщений: 913

12.11.2012, 01:07

17

Переменная nothrow уже есть в std:: const std::nothrow_t std::nothrow
Наверно из-за этого будет конфликт.

Миниатюры

Возникает ошибка с using namespace std;
 



0



0 / 0 / 0

Регистрация: 26.09.2012

Сообщений: 38

12.11.2012, 01:10

18

Благодарю за пояснение.



0



Добавлено 11 апреля 2021 в 23:51

Допустим, вы впервые едете к другу, и вам дан адрес: Фронт-стрит, 245 в Милл-Сити. Достигнув Милл-Сити, вы открываете свою карту и обнаруживаете, что на самом деле в Милл-Сити есть две разные улицы Фронт-стрит, расположенные на разных концах города! Куда бы вы поехали? Если нет дополнительных подсказок, которые помогли бы вам принять решение (например, вы помните, что его дом находится у реки), вам придется позвонить своему другу и попросить дополнительную информацию. Поскольку это сбивает с толку и неэффективно (особенно для почтальона), в большинстве стран все названия улиц и адреса домов в городе должны быть уникальными.

Точно так же C++ требует, чтобы все идентификаторы были однозначными. Если два идентичных идентификатора вводятся в одну и ту же программу таким образом, что компилятор или компоновщик не может их различить, компилятор или компоновщик выдаст ошибку. Эта ошибка обычно называется конфликтом имен (или коллизией имен).

Пример коллизии имен

a.cpp:

#include <iostream>
 
void myFcn(int x)
{
    std::cout << x;
}

main.cpp:

#include <iostream>
 
void myFcn(int x)
{
    std::cout << 2 * x;
}
 
int main()
{
    return 0;
}

Когда компилятор компилирует эту программу, он независимо компилирует a.cpp и main.cpp, и каждый файл компилируется без проблем.

Однако, когда работает компоновщик, он слинкует все определения в a.cpp и main.cpp вместе и обнаружит конфликтующие определения для функции myFcn. После этого компоновщик прервет работу, выдав ошибку. Обратите внимание, что эта ошибка возникает, даже если myFcn никогда не вызывается!

Большинство конфликтов имен возникают в двух случаях:

  1. Два (или более) определения функции (или глобальной переменной) вводятся в отдельные файлы, которые компилируются в одну программу. Это приведет к ошибке компоновщика, как показано выше.
  2. Два (или более) определения функции (или глобальной переменной) вводятся в один и тот же файл (часто через #include). Это приведет к ошибке компилятора.

По мере того, как программы становятся больше и используют больше идентификаторов, вероятность возникновения конфликта имен значительно возрастает. Хорошей новостью является то, что C++ предоставляет множество механизмов для предотвращения конфликтов имен. Одним из таких механизмов является локальная область видимости, которая не позволяет локальным переменным, определенным внутри функций, конфликтовать друг с другом. Но локальная область видимости не работает для имен функций. Так как же нам уберечь имена функций от конфликта друг с другом?

Что такое пространство имен?

Вернемся на мгновение к нашей аналогии с адресом: наличие двух Фронт-стрит было проблемой только потому, что эти улицы существовали в одном городе. С другой стороны, если бы вам пришлось доставлять почту по двум адресам: один на Фронт-стрит, 209 в Милл-Сити, а другой – на Фронт-стрит, 417 в Джонсвилле, путаницы в том, куда идти, не возникнет. Другими словами, города предоставляют группы, которые позволяют нам устранять неоднозначность адресов, которые в противном случае могли бы конфликтовать друг с другом. Пространства имен действуют так же, как города в этой аналогии.

Пространство имен – это область, которая позволяет вам объявлять имена внутри него с целью устранения неоднозначности. Пространство имен обеспечивает область видимости (называемую областью пространства имен) для имен, объявленных внутри него, что просто означает, что любое имя, объявленное внутри пространства имен, не будет ошибочно принято за идентичные имена в других областях видимости.

Ключевой момент


Имя, объявленное в пространстве имен, не будет ошибочно принято за идентичное имя, объявленное в другой области видимости.

В пространстве имен все имена должны быть уникальными, в противном случае возникнет конфликт имен.

Пространства имен часто используются для группировки в большом проекте связанных идентификаторов, чтобы избежать непреднамеренного конфликта с другими идентификаторами. Например, если вы поместите все свои математические функции в пространство имен, называемое math, тогда ваши математические функции не будут конфликтовать с функциями с такими же именами вне пространства имен math.

На следующем уроке мы поговорим о том, как создавать собственные пространства имен.

Глобальное пространство имен

В C++ любое имя, которое не определено внутри класса, функции или пространства имен, считается частью неявно определенного пространства имен, называемого глобальным пространством имен (иногда также называемым глобальной областью видимости).

В примере в начале урока функции main() и обе версии myFcn() определены внутри глобального пространства имен. Конфликт имен, обнаруженный в этом примере, происходит из-за того, что обе версии myFcn() попадают в глобальное пространство имен, что нарушает правило, согласно которому все имена в пространстве имен должны быть уникальными.

Когда C++ был только разработан, все идентификаторы в стандартной библиотеке C++ (включая std::cin и std::cout) были доступны для использования без префикса std:: (они были частью глобального пространства имен). Однако это означало, что любой идентификатор в стандартной библиотеке потенциально может конфликтовать с любым именем, которое вы выбрали для своих собственных идентификаторов (также определенных в глобальном пространстве имен). Код, который работал, мог внезапно получить конфликт имен, когда вы включили через #include новый файл из стандартной библиотеки. Или, что еще хуже, программы, которые будут компилироваться под одной версией C++, могут не компилироваться под будущей версией C++, поскольку новые идентификаторы, введенные в стандартную библиотеку, могут иметь конфликт имен с уже написанным кодом. Таким образом, C++ переместил все функции стандартной библиотеки в пространство имен с именем std (сокращение от «standard», «стандарт»).

Оказывается, имя std::cout на самом деле не std::cout. На самом деле это просто cout, а std – это имя пространства имен, частью которого является идентификатор cout. Поскольку cout определен в пространстве имен std, имя cout не будет конфликтовать с любыми объектами или функциями с именем cout, которые мы создаем в глобальном пространстве имен.

Точно так же при доступе к идентификатору, который определен в пространстве имен (например, std::cout), вам необходимо сообщить компилятору, что мы ищем идентификатор, определенный внутри пространства имен (std).

Ключевой момент


Когда вы используете идентификатор, который определен внутри пространства имен (например, пространство имен std), вы должны сообщить компилятору, что этот идентификатор находится внутри этого пространства имен.

Есть несколько способов сделать это.

Явный квалификатор пространства имен std::

Самый простой способ сообщить компилятору, что мы хотим использовать cout из пространства имен std, – это явно использовать префикс std::. Например:

#include <iostream>
 
int main()
{
    // когда мы говорим cout, мы имеем в виду cout, определенный в пространстве имен std
    std::cout << "Hello world!";
    return 0;
}

Символы :: – это оператор, называемый оператором разрешения области видимости. Идентификатор слева от символов :: определяет пространство имен, в котором содержится имя справа от символов ::. Если идентификатор слева от символа :: не указан, предполагается глобальное пространство имен.

Поэтому, когда мы говорим std::cout, мы говорим «cout, который находится в пространстве имен std».

Это самый безопасный способ использования cout, потому что нет двусмысленности в том, на какой cout мы ссылаемся (на тот, который находится в пространстве имен std).

Лучшая практика


Используйте явные префиксы пространств имен для доступа к идентификаторам, определенным в этих пространствах имен.

using namespace std (и почему его следует избегать)

Другой способ получить доступ к идентификаторам внутри пространства имен – использовать инструкцию директивы using. Вот наша исходная программа HelloWorld с директивой using:

#include <iostream>

// это директива using, указывающая компилятору проверять пространство имен std
// при разрешении идентификаторов без префикса 
using namespace std;
 
int main()
{
    // cout не имеет префикса, поэтому компилятор проверит, 
    // определен ли cout локально или в пространстве имен std
    cout << "Hello world!";
    return 0;
}

Директива using указывает компилятору проверять указанное пространство имен при попытке разрешить идентификатор, не имеющий префикса пространства имен. Итак, в приведенном выше примере, когда компилятор определяет, что такое идентификатор cout, он проверяет как локально (где он не определен), так и в пространстве имен std (где он будет соответствовать std::cout).

Многие тексты, руководства и даже некоторые компиляторы рекомендуют или используют директиву using в верхней части программы. Однако при таком использовании это плохая практика, и она крайне не рекомендуется.

Рассмотрим следующую программу:

#include <iostream> // импортирует объявление std::cout
 
using namespace std; // делает std::cout доступным как "cout"
 
int cout() // объявляет нашу собственную функцию "cout"
{
    return 5;
}
 
int main()
{
    cout << "Hello, world!"; // Ошибка компиляции! Какой cout нам здесь нужен? 
                             // Тот, который находится в пространстве имен std или тот,
                             // который мы определили выше?
 
    return 0;
}

Приведенная выше программа не компилируется, потому что теперь компилятор не может определить, нужна нам функция cout, которую мы определили, или cout, которая определена внутри пространства имен std.

При использовании директивы using таким образом любой идентификатор, который мы определяем, может конфликтовать с любым идентификатором с таким же именем в пространстве имен std. Хуже того, хотя имя идентификатора может не конфликтовать сегодня, оно может конфликтовать с новыми идентификаторами, добавленными в пространство имен std в будущих версиях языка. В этом изначально и заключалась вся суть перемещения всех идентификаторов стандартной библиотеки в пространство имен std!

Предупреждение


Избегайте использования директив (таких как using namespace std;) в верхней части вашей программы. Они нарушают причину, по которой изначально были добавлены пространства имен.

Подробнее об инструкциях using (и соответственно о том, как их использовать) мы поговорим в уроке «6.12 – Инструкции using».

Теги

C++ / CppLearnCppДля начинающихКомпиляторЛинкерОбучениеПрограммированиеПространство имен

Время на прочтение
3 мин

Количество просмотров 44K

То, что написано ниже, для многих квалифицированных C++ разработчиков будет прекрасно известным и очевидным, но тем не менее, я периодически встречаю using namespace std; в коде различных проектов, а недавно в нашумевшей статье про впечатления от высшего образования было упомянуто, что студентов так учат писать код в вузах, что и сподвигло меня написать эту заметку.

Итак… многие слышали, что using namespace std; в начале файла в C++ считается плохой практикой и нередко даже явно запрещен в принятых во многих проектах стандартах кодирования. Касательно недопустимости использования using namespace в header-файлах вопросов обычно не возникает, если мы хоть немного понимаем, как работает препроцессор компилятора: .hpp-файлы при использовании директивы #include вставляются в код «как есть», и соответственно using автоматически распространится на все затронутые .hpp- и .cpp-файлы, если файл с ним был заинклюден хоть в одном звене цепочки (на одном из сайтов это метко обозвали «заболеванием передающимся половым путем«). Но вот про .cpp-файлы все не так очевидно, так что давайте еще раз разберем, что же именно здесь не так.

Для чего вообще придумали пространства имен в C++? Когда какие-то две сущности (типы, функции, и т.д.) имеют идентификаторы, которые могут конфликтовать друг с другом при совместном использовании, C++ позволяет объявлять пространства с помощью ключевого слова namespace. Всё, что объявлено внутри пространства имен, принадлежит только этому пространству имен (а не глобальному). Используя using мы вытаскиваем сущности какого-либо пространства имен в глобальный контекст.

А теперь посмотрим, к чему это может привести.

Допустим, вы используете две библиотеки под названием Foo и Bar и написали в начале файла что-то типа

using namespace foo;
using namespace bar;

…таким образом вытащив всё, что есть в foo:: и в bar:: в глобальное пространство имен.

Все работает нормально, и вы можете без проблем вызвать Blah() из Foo и Quux() из Bar. Но однажды вы обновляете библиотеку Foo до новой версии Foo 2.0, которая теперь еще имеет в себе функцию Quux().

Теперь у вас конфликт: и Foo 2.0, и Bar импортируют Quux() в ваше глобальное пространство имен. В лучшем случае это вызовет ошибку на этапе компиляции, и исправление этого потребует усилий и времени.

А вот если бы вы явно указывали в коде метод с его пространством имен, а именно, foo::Blah() и bar::Quux(), то добавление foo::Quux() не было бы проблемой.

Но всё может быть даже хуже!

В библиотеку Foo 2.0 могла быть добавлена функция foo::Quux(), про которую компилятор по ряду причин посчитает, что она однозначно лучше подходит для некоторых ваших вызовов Quux(), чем bar::Quux(), вызывавшаяся в вашем коде на протяжении многих лет. Тогда ваш код все равно скомпилируется, но будет молча вызывать неправильную функцию и делать бог весть что. И это может привести к куче неожиданных и сложноотлаживающихся ошибок.

Имейте в виду, что пространство имен std:: имеет множество идентификаторов, многие из которых являются очень распространенными (list, sort, string, iterator, swap), которые, скорее всего, могут появиться и в другом коде, либо наоборот, в следущей версии стандарта C++ в std добавят что-то, что совпадет с каким-то из идентификаторов в вашем существующем коде.

Если вы считаете это маловероятным, то посмотрим на реальные примеры со stackoverflow:

  • Вот тут был задан вопрос о том, почему код возвращает совершенно не те результаты, что от него ожидает разработчик. По факту там происходит именно описанное выше: разработчик передает в функцию аргументы неправильного типа, но это не вызывает ошибку компиляции, а компилятор просто молча использует вместо объявленной выше функции distance() библиотечную функцию std::distance() из std:: ставшего глобальным неймспейсом.

  • Второй пример на ту же тему: вместо функции swap() используется std::swap(). Опять же, никакой ошибки компиляции, а просто неправильный результат работы.

Так что подобное происходит гораздо чаще, чем кажется.

P.S. В комментариях еще была упомянута такая штука, как Argument Dependent Lookup, она же Koenig lookup. Почитать подробнее можно на Википедии, но в итоге лекарство от этой проблемы такое же: явное указание пространства имен перед вызовом функций везде, где только можно.

  • Forum
  • General C++ Programming
  • error with using namespace std

error with using namespace std

the program runs well for this header file.
#pragma once
#include»birthday.h»
#include<string>
using namespace std;
class people
{
public:
people(string yourName, birthday DOB);
void printInfo();
private:
string name;
birthday dobObject;
};

but
by removing using namespace std; the programs fails with error. can you please give me the reason and elaborate?
#pragma once
#include»birthday.h»
#include<string>

class people
{
public:
people(string yourName, birthday DOB);
void printInfo();
private:
string name;
birthday dobObject;
};

Last edited on

1. Avoid

using namespace std;

at global scope in a header file.
2. In the header, use qualified names for entities from the standard library

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// #include guard
#include"birthday.h"
#include<string>

class people
{
    public:
        people( std::string yourName, birthday DOB );

        void printInfo() const ; // non-modifier, so const
    
    private:
        std::string name;
        birthday date_of_birth;	
};

#pragma once

class birthday
{
public:
birthday(int m, int d , int );
void printOutDOB();
private:
int day;
int month;
int year;

};

excuse me sir, but for above header file «bithday.h» i didn’t have to use qualified names for int. is there some rules for that in documentation or what? can you elaborate it?

1) Please use code tags when posting code, to make it readable:

http://www.cplusplus.com/articles/z13hAqkS/

2) There’s nothing in the header file that needs a std:: qualification, but there are things in your source file. Since there’s no longer a using namespace std; statement anywhere in the translation unit, you’ll need to qualify those names in the source file.

Last edited on

by removing using namespace std; the programs fails with error.

You do mean that the compiler aborts and gives error messages.

It is not enough to merely note that there is «an error». You have to read the error messages carefully, because they tell what offends the compiler.

For example,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<string>

class people
{
    public:
        people( string yourName, int DOB );

        void printInfo() const ;
    
    private:
        string name;
        int date_of_birth;	
};

int main()
{
    return 0;
}

Produces on one compiler:

6:24: error: expected ')' before 'yourName'
11:9: error: 'string' does not name a type

and in another:

main.cpp:6:24: error: expected ')' before 'yourName'
         people( string yourName, int DOB );
                        ^
main.cpp:11:9: error: 'string' does not name a type
         string name;
         ^

Both clearly point to lines 6 and 11.

Line 11 is quite clear; the compiler understands that ‘string’ should probably be a name of a type, but compiler has not seen definition of such type. You do include <string> and it does contain definition of ‘string’, but that definition is within namespace ‘std’ and the compiler does not see inside namespaces unless it is told to look there.

Both using namespace std; and using std::string; essentially state that when looking for ‘string’, a ‘string’ inside ‘std’ is a match too.

std::string in code is more explicit: only the ‘string’ in ‘std’ is a match.

What is before ‘yourName’ on line 6? people( string
This message is harder to explain.
We can try to humor the compiler and test what happens if we write line 6 as:
people( string );
Alas, that gives a different error:

6:24: error: field 'string' has incomplete type 'people'

The important thing is to read those error messages and use the info the best you can.
For example, when asking for help do show the exact messages. Someone might be able to help you read them.

clang++ emits a very clear diagnostic.

MinGW64 6:38am /r/code/test >CC --version
clang version 5.0.1 (tags/RELEASE_501/final)
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: C:msys64mingw64bin
MinGW64 6:38am /r/code/test >CC -c test.cpp
test.cpp:6:17: error: unknown type name 'string'; did you mean 'std::string'?
        people( string yourName, int DOB );
                ^~~~~~
                std::string
C:msys64mingw64includec++7.3.0bits/stringfwd.h:74:33: note: 'std::string' declared here
  typedef basic_string<char>    string;
                                ^
test.cpp:11:9: error: unknown type name 'string'; did you mean 'std::string'?
        string name;
        ^~~~~~
        std::string
C:msys64mingw64includec++7.3.0bits/stringfwd.h:74:33: note: 'std::string' declared here
  typedef basic_string<char>    string;
                                ^
2 errors generated.

Topic archived. No new replies allowed.

Понравилась статья? Поделить с друзьями:
  • Ошибка n20 на стиральной машине indesit
  • Ошибка n20 на стиральной машине hotpoint ariston
  • Ошибка n20 в стиральной машине аристон
  • Ошибка n102006 guns of glory
  • Ошибка n1 12 доступа к файлу конфигурации профиля diopost