Строка объявляется без <string.h>
От: Аноним  
Дата: 07.10.04 15:51
Оценка:
Это содержимое моего stdafx.h файла:


// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//

#pragma once




#include <iostream>
#include <tchar.h>
using namespace std;

// TODO: reference additional headers your program requires here


А это cpp файл:


// pt4.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
string user_name;

return 0;
}

Компилируется без ошибок.
Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?
Re: Строка объявляется без <string.h>
От: Шахтер Интернет  
Дата: 07.10.04 16:03
Оценка:
Здравствуйте, <Аноним>, Вы писали:

Вероятно, из-за iostream.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: Строка объявляется без <string.h>
От: butcher Россия http://bu7cher.blogspot.com
Дата: 07.10.04 16:07
Оценка: -1
Здравствуйте, <Аноним>, Вы писали:

А>Компилируется без ошибок.

А>Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?
А вы её, переменную эту попробуйте использовать.. может и ошибка проявится..

Нет ничего невозможного..
Re[2]: Строка объявляется без <string.h>
От: Аноним  
Дата: 07.10.04 16:09
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Здравствуйте, <Аноним>, Вы писали:


Ш>Вероятно, из-за iostream.


Вот пример из MSDN:

// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
using namespace std;

string str1 ( "Hello world" );
cout << "The original string object str1 is: "
<< str1 << endl;
cout << "The length of the string object str1 = "
<< str1.length ( ) << endl << endl;

// Converting a string to an array of characters
const char *ptr1 = 0;
ptr1= str1.data ( );
cout << "The modified string object ptr1 is: " << ptr1
<< endl;
cout << "The length of character array str1 = "
<< strlen ( ptr1) << endl << endl;

// Converting a string to a C-style string
const char *c_str1 = str1.c_str ( );
cout << "The C-style string c_str1 is: " << c_str1
<< endl;
cout << "The length of C-style string str1 = "
<< strlen ( c_str1) << endl << endl;
}

Получается, что-то лишнее или <string> или <iostream>
Re: Строка объявляется без <string.h>
От: achp  
Дата: 07.10.04 16:09
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?


Во-первых, <string.h> не имеет никакого отношения к типу std::string.

Во-вторых, <string>, где этот тип в действительности определен, скорее всего включается косвенно, через <iostream>.
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
Re[3]: Строка объявляется без <string.h>
От: achp  
Дата: 07.10.04 16:12
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Получается, что что-то лишнее — или <string>, или <iostream>.


Нет. Если <string> уже включен (хоть через <iostream>, хоть как-то иначе), то это не мешает включить его повторно. Ничего страшного в этом нет:

#include <string>
#include <string>

// все хорошо!
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
Re: Строка объявляется без <string.h>
От: yxiie Украина www.enkord.com
Дата: 07.10.04 16:16
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Компилируется без ошибок.

А>Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?

потому что:

iostream->istream->ostream->ios->xlocnum->streambuf->xiosbase->xlocale->cstring->string.h

... << RSDN@Home 1.1.3 stable >>
Re[2]: Строка объявляется без <string.h>
От: Аноним  
Дата: 07.10.04 16:19
Оценка:
Здравствуйте, butcher, Вы писали:

B>Здравствуйте, <Аноним>, Вы писали:


А>>Компилируется без ошибок.

А>>Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?
B>А вы её, переменную эту попробуйте использовать.. может и ошибка проявится..

использова таким образом: user_name.assign("RUSSIAN"); все ОК
Re[2]: Строка объявляется без <string.h>
От: Аноним  
Дата: 07.10.04 16:22
Оценка:
Здравствуйте, achp, Вы писали:

A>Здравствуйте, <Аноним>, Вы писали:


А>>Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?


A>Во-первых, <string.h> не имеет никакого отношения к типу std::string.


A>Во-вторых, <string>, где этот тип в действительности определен, скорее всего включается косвенно, через <iostream>.



<string.h> — это опечатка, я имел ввиду <string>
по-поводу "Во-вторых", я не спорю, но зачем путать людей: примеры MSDN, серьезные книги
Re[2]: Строка объявляется без <string.h>
От: Аноним  
Дата: 07.10.04 16:24
Оценка:
Здравствуйте, yxiie, Вы писали:

Y>Здравствуйте, <Аноним>, Вы писали:


А>>Компилируется без ошибок.

А>>Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?

Y>потому что:


Y>iostream->istream->ostream->ios->xlocnum->streambuf->xiosbase->xlocale->cstring->string.h


Y>


Great, я дошел до xlocnum и решил написать вопрос в форуме
Re: Строка объявляется без <string.h>
От: Vamp Россия  
Дата: 08.10.04 09:05
Оценка:
На самом деле форум пестри сообщениями людей, у которых не компилируется какая-то операция со string'ом. Все компилируются, а это нет. Оказывается, не подключен <string>.
Да здравствует мыло душистое и веревка пушистая.
Re: Строка объявляется без <string.h>
От: LaptevVV Россия  
Дата: 08.10.04 09:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это содержимое моего stdafx.h файла:


А>#include "stdafx.h"


А>int _tmain(int argc, _TCHAR* argv[])

А>{
А> string user_name;

А> return 0;

А>}

А>Компилируется без ошибок.

А>Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?
Ну, не string.h, а просто string
Может быть в других файлах прописан?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Строка объявляется без <string.h>
От: lst Россия  
Дата: 08.10.04 09:57
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А><string.h> — это опечатка, я имел ввиду <string>

А>по-поводу "Во-вторых", я не спорю, но зачем путать людей: примеры MSDN, серьезные книги

Почему же путать? Как раз в примере написано правильно. Мейерс, например, рекомендует (цитирую):

При каждой ссылке на элементы пространства имен std вы [skipped] отвечаете за включение соответствующих заголовков.


Я считаю это правильным и сам стараюсь поступать именно таким образом. Потому что может так случиться, что придется компилировать проект с другой реализацией STL, а в ней может оказаться, что <iostream> не включает <string>. Проект не будет компилироваться. А всё потому, что стандарт не определяет какие стандартные заголовки могут или должны включаться в другие стандартные заголовки.
Re: Строка объявляется без <string.h>
От: Esperar  
Дата: 08.10.04 10:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Это содержимое моего stdafx.h файла:



А>// stdafx.h : include file for standard system include files,

А>// or project specific include files that are used frequently, but
А>// are changed infrequently
А>//

А>#pragma once





А>#include <iostream>

А>#include <tchar.h>
А>using namespace std;

А>// TODO: reference additional headers your program requires here



А>А это cpp файл:



А>// pt4.cpp : Defines the entry point for the console application.

А>//

А>#include "stdafx.h"


А>int _tmain(int argc, _TCHAR* argv[])

А>{
А> string user_name;

А> return 0;

А>}

А>Компилируется без ошибок.

А>Вопрос: почему компилятор (.NET) не ругается на отсуствие заголовочного файла <string.h>?

VC 7.1
<iostream>-<istream>-<ostream>-<ios>-<xlocnum>-<streambuf>-<xiosbase>-<xlocale>-<strxcept>-<xstring>
а в нём, заветном:
typedef basic_string<char, char_traits<char>, allocator<char> >
    string;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.