Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
1

Функции из заголовочника cstring размещены в namespace std ?

19.07.2015, 18:16. Просмотров 1845. Ответов 25
Метки нет (Все метки)


Столкнулся с таким кодом в учебнике Стивена Праты (12 глава, стр. 641-615):
Самописный класс String
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// string1.h -- fixed and augmented string class definition
 
#ifndef STRING1_H_
#define STRING1_H_
#include <iostream>
using std::ostream;
using std::istream;
 
class String
{
private:
    char * str;             // pointer to string
    int len;                // length of string
    static int num_strings; // number of objects
    static const int CINLIM = 80;  // cin input limit
public:
// constructors and other methods
    String(const char * s); // constructor
    String();               // default constructor
    String(const String &); // copy constructor
    ~String();              // destructor
    int length () const { return len; }
// overloaded operator methods    
    String & operator=(const String &);
    String & operator=(const char *);
    char & operator[](int i);
    const char & operator[](int i) const;
// overloaded operator friends
    friend bool operator<(const String &st, const String &st2);
    friend bool operator>(const String &st1, const String &st2);
    friend bool operator==(const String &st, const String &st2);
    friend ostream & operator<<(ostream & os, const String & st);
    friend istream & operator>>(istream & is, String & st);
// static function
    static int HowMany();
};
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// string1.cpp -- String class methods
#include <cstring>                 // string.h for some
#include "string1.h"               // includes <iostream>
using std::cin;
using std::cout;
 
// initializing static class member
 
int String::num_strings = 0;
 
// static method
int String::HowMany()
{
    return num_strings;
}
 
// class methods
String::String(const char * s)     // construct String from C string
{
    len = std::strlen(s);          // set size
    str = new char[len + 1];       // allot storage
    std::strcpy(str, s);           // initialize pointer
    num_strings++;                 // set object count
}
 
String::String()                   // default constructor
{
    len = 4;
    str = new char[1];
    str[0] = '\0';                 // default string
    num_strings++;
}
 
String::String(const String & st)
{
    num_strings++;             // handle static member update
    len = st.len;              // same length
    str = new char [len + 1];  // allot space
    std::strcpy(str, st.str);  // copy string to new location
}
 
String::~String()                     // necessary destructor
{
    --num_strings;                    // required
    delete [] str;                    // required
}
 
// overloaded operator methods    
 
    // assign a String to a String
String & String::operator=(const String & st)
{
    if (this == &st)
        return *this;
    delete [] str;
    len = st.len;
    str = new char[len + 1];
    std::strcpy(str, st.str);
    return *this;
}
 
    // assign a C string to a String
String & String::operator=(const char * s)
{
    delete [] str;
    len = std::strlen(s);
    str = new char[len + 1];
    std::strcpy(str, s);
    return *this;
}
 
    // read-write char access for non-const String
char & String::operator[](int i)
{
    return str[i];
}
 
    // read-only char access for const String
const char & String::operator[](int i) const
{
    return str[i];
}
 
// overloaded operator friends
 
bool operator<(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) < 0);
}
 
bool operator>(const String &st1, const String &st2)
{
    return st2 < st1;
}
 
bool operator==(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) == 0);
}
 
    // simple String output
ostream & operator<<(ostream & os, const String & st)
{
    os << st.str;
    return os; 
}
 
    // quick and dirty String input
istream & operator>>(istream & is, String & st)
{
    char temp[String::CINLIM];
    is.get(temp, String::CINLIM);
    if (is)
        st = temp;
    while (is && is.get() != '\n')
        continue;
    return is; 
}


С каких это пор сишные функции стали размещены в пространстве имён std? Опечатка?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2015, 18:16
Ответы с готовыми решениями:

Использовать using namespace std; или каждый раз прописывать std:: . ?
Как безопаснее и рациональнее поступать? Как в больших проектах поступают на этот счет?

Что использовать, std::cout или просто using namespace std?
Приветствую! Сейчас учу С++, постигаю азы так сказать. В арсенале две книги - Джефф Кент, ...

Зачем часто писать std::, если можно один раз using namespace std?
зачем часто писать std:: если можно один раз using namespace std?

Пространство имен - namespace std или std::
В каких случая лучше писать (std::cout) или просто прописать (namespace std) и почему ?

25
Don't worry, be happy
16971 / 9852 / 1897
Регистрация: 27.09.2012
Сообщений: 24,430
Записей в блоге: 1
19.07.2015, 18:18 2
Цитата Сообщение от gru74ik Посмотреть сообщение
С каких это пор сишные функции стали размещены в пространстве имён std? Опечатка?
нет, не опечатка. Из стандарта:
D.5 C standard library headers
2. Every C header, each of which has a name of the form name.h, behaves as if each name placed in the standard library namespace by the corresponding cname header is placed within the global namespace scope. It is unspecified whether these names are first declared or defined within namespace scope (3.3.6) of the namespace std and are then injected into the global namespace scope by explicit using-declarations (7.3.3).

3. [ Example: The header <cstdlib> assuredly provides its declarations and definitions within the namespace std. It may also provide these names within the global namespace. The header <stdlib.h> assuredly provides the same declarations and definitions within the global namespace, much as in the C Standard. It may also provide these names within the namespace std. —end example ]
3
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
19.07.2015, 19:04  [ТС] 3
Компилятор MinGW 4.9.1. (который вместе с QtCreator поставляется) ругается на эти строчки:
ошибка: 'strcpy' is not a member of 'std'
std::strcpy(result.str, temp);
^
ошибка: 'strlen' is not a member of 'std'
len = std::strlen(s);
____^
Добавлено через 3 минуты
Вот так выглядит pro-файл:
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
CONFIG += c++11

SOURCES += main.cpp \
String.cpp

include(deployment.pri)
qtcAddDeployment()

QMAKE_CXXFLAGS += -std=c++11

HEADERS += \
String.h
Добавлено через 2 минуты
Делаю это упражнение:
12 глава, упражнение 2 (стр. 656)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//  sp_Ch12_Pg656_Ex02 - main.cpp
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 12, страница 656, упражнение 2.
/*
Усовершенствуйте объявление класса String (т.е. замените stringl.h на
string2.h), выполнив перечисленные ниже действия.
а. Перегрузите операцию + для объединения двух строк в одну.
б. Напишите функцию-член stringlow(), которая преобразует все буквенные
символы в строке в нижний регистр. (Не забудьте о семействе cctype
символьных функций.)
в. Напишите функцию-член stringup(), которая преобразует все буквенные
символы в строке в верхний регистр.
г. Напишите функцию-член, которая принимает аргумент типа char и
возвращает количество раз, которое символ появляется в строке.
*/
/*
Проверьте работу полученного класса в следующей программе:
// ре12_2.срр
#include <iostream>
#include "string2.h"
using namespace std;
 
int main()
{
    String sl(" and I am a C++ student.");
    String s2 = "Please enter your name: "; // ввод имени
    String s3;
    cout << s2; // перегруженная операция <<
    cin >> s3;  // перегруженная операция >>
    s2 = "My name is " + s3; // перегруженные операции =, +
    cout << s2 << " .\n";
    s2= s2 + si;
    s2.stringup();  // преобразование строки в верхний регистр
    cout << "The string\n" << s2 << "\ncontains " << s2.has('A')
    << " 'A' characters in it.\n";
    si = "red";     // String(const char *) ,
                    // тогда String & operator=(const Strings)
    String rgb[3] = { String(s1), String("green"), String("blue") };
    cout << "Enter the name of a primary color for mixing light: ";  // ввод цвета
    String ans;
    bool success = false;
    while (cin >> ans)
    {
        ans.stringlow(); // преобразование строки в нижний регистр
        for (int i = 0; i < 3; i + + )
        {
            if (ans == rgb[i])  // перегруженная операция ==
            {
                cout << "That's right!\n";
                success = true;
                break;
            }
        }
 
        if (success)
            break;
        else
            cout << "Try again! \n";
    }
    cout << "Bye\n";
    return 0;
}
*/
 
#include <iostream>
#include <String.h>
 
int main()
{
    using namespace std;
 
    String s1(" and I am a C++ student.");
    String s2 = "Please enter your name: "; // ввод имени
    String s3;
    cout << s2; // перегруженная операция <<
    cin >> s3;  // перегруженная операция >>
    //s2 = "My name is " + s3; // перегруженные операции =, +
    cout << s2 << " .\n";
    s2 = s2 + s1;
    s2.string_up();  // преобразование строки в верхний регистр
    cout << "The string\n" << s2 << "\ncontains " << s2.has('A')
    << " 'A' characters in it.\n";
    s1 = "red";     // String(const char *) ,
                    // тогда String & operator=(const Strings)
    String rgb[3] = { String(s1), String("green"), String("blue") };
    cout << "Enter the name of a primary color for mixing light: ";  // ввод цвета
    String ans;
    bool success = false;
    while (cin >> ans)
    {
        ans.string_low(); // преобразование строки в нижний регистр
        for (int i = 0; i < 3; ++i)
        {
            if (ans == rgb[i])  // перегруженная операция ==
            {
                cout << "That's right!\n";
                success = true;
                break;
            }
        }
 
        if (success)
            break;
        else
            cout << "Try again! \n";
    }
    cout << "Bye\n";
    return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//  sp_Ch12_Pg656_Ex02 - String.h
 
#ifndef STRING_H
#define STRING_H
 
#include <iostream>
using std::ostream;
using std::istream;
 
class String
{
private:
    char * str;             // pointer to string
    int len;                // length of string
    static int num_strings; // number of objects
    static const int CINLIM = 80;  // cin input limit
public:
// constructors and other methods
    String(const char * s); // constructor
    String();               // default constructor
    String(const String &); // copy constructor
    ~String();              // destructor
    int length() const { return len; }
    int has(char symbol);   // how many times the character
                            // can be found in the string
    void string_low();
    void string_up();
 
// overloaded operator methods
    String & operator=(const String & st);
    String & operator=(const char *);
    char & operator[](int i);
    const char & operator[](int i) const;
// overloaded operator friends
    friend bool operator<(const String & st1, const String & st2);
    friend bool operator>(const String & st1, const String & st2);
    friend bool operator==(const String & st1, const String & st2);
    friend String operator+(const String & st1, const String & st2);
    friend ostream & operator<<(ostream & os, const String & st);
    friend istream & operator>>(istream & is, String & st);
// static function
    static int how_many();
};
 
#endif // STRING_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//  sp_Ch12_Pg656_Ex02 - String.cpp
 
#include <cstring>      // string.h for some
#include <cctype>
#include "String.h"     // includes <iostream>
using std::cin;
using std::cout;
 
// initializing static class member
 
int String::num_strings = 0;
 
// static method
int String::how_many()
{
    return num_strings;
}
 
// class methods
String::String(const char * s)     // construct String from C string
{
    len = std::strlen(s);          // set size
    str = new char[len + 1];       // allot storage
    std::strcpy(str, s);           // initialize pointer
    num_strings++;                 // set object count
}
 
String::String()                   // default constructor
{
    len = 4;
    str = new char[1];
    str[0] = '\0';                 // default string
    num_strings++;
}
 
String::String(const String & st)
{
    num_strings++;             // handle static member update
    len = st.len;              // same length
    str = new char [len + 1];  // allot space
    std::strcpy(str, st.str);  // copy string to new location
}
 
String::~String()                     // necessary destructor
{
    --num_strings;                    // required
    delete [] str;                    // required
}
 
int String::has(char symbol)
{
    int counter = 0;
    for (int i = 0; i < len; ++i)
        if (str[i] == symbol)
            ++counter;
    return counter;
}
 
void String::string_low()
{
    for (int i = 0; i < len; ++i)
        str[i] = (char)tolower(str[i]);
}
 
void String::string_up()
{
    for (int i = 0; i < len; ++i)
        str[i] = (char)toupper(str[i]);
}
 
// overloaded operator methods
 
    // assign a String to a String
String & String::operator=(const String & st)
{
    if (this == &st)
        return *this;
    delete [] str;
    len = st.len;
    str = new char[len + 1];
    std::strcpy(str, st.str);
    return *this;
}
 
    // assign a C string to a String
String & String::operator=(const char * s)
{
    delete [] str;
    len = std::strlen(s);
    str = new char[len + 1];
    std::strcpy(str, s);
    return *this;
}
 
    // read-write char access for non-const String
char & String::operator[](int i)
{
    return str[i];
}
 
    // read-only char access for const String
const char & String::operator[](int i) const
{
    return str[i];
}
 
// overloaded operator friends
 
bool operator<(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) < 0);
}
 
bool operator>(const String &st1, const String &st2)
{
    return st2 < st1;
}
 
bool operator==(const String &st1, const String &st2)
{
    return (std::strcmp(st1.str, st2.str) == 0);
}
 
// concatenates two strings to one
String operator+(const String & st1, const String & st2)
{
    String result;
    result.len = st1.len + st2.len;
    delete [] result.str;
    result.str = new char[result.len + 1];
    char * temp = new char[st1.len + 1];
    std::strcpy(temp, st1.str);
    std::strcat(temp, st2.str);
    std::strcpy(result.str, temp);
    delete [] temp;
 
    return result;
}
 
    // simple String output
ostream & operator<<(ostream & os, const String & st)
{
    os << st.str;
    return os;
}
 
    // quick and dirty String input
istream & operator>>(istream & is, String & st)
{
    char temp[String::CINLIM];
    is.get(temp, String::CINLIM);
    if (is)
        st = temp;
    while (is && is.get() != '\n')
        continue;
    return is;
}
0
Don't worry, be happy
16971 / 9852 / 1897
Регистрация: 27.09.2012
Сообщений: 24,430
Записей в блоге: 1
19.07.2015, 19:13 4
gru74ik, http://ideone.com/TakQU0
1
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
19.07.2015, 19:17  [ТС] 5
Croessmah, благодарю. Буду разбираться, откуда такая печаль у меня в QtCreator получается.
0
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
19.07.2015, 19:29  [ТС] 6
Croessmah, в Code::Blocks та же проблема. Ругается на использованные мной функции, и выкидывает в заголовочник cstring, ругаясь так же и на функции, которые я даже не юзал:
0
Миниатюры
Функции из заголовочника cstring размещены в namespace std ?  
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
19.07.2015, 19:33  [ТС] 7
В QtCreator та же песня:
0
Миниатюры
Функции из заголовочника cstring размещены в namespace std ?  
Don't worry, be happy
16971 / 9852 / 1897
Регистрация: 27.09.2012
Сообщений: 24,430
Записей в блоге: 1
19.07.2015, 19:40 8
gru74ik, проверил сейчас под виндой. Среда Code::Blocks 13.12, компилятор MinGW 4.8.5 - всё работает.
1
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
19.07.2015, 19:44  [ТС] 9
Croessmah, странно.
У меня в QtCreator с компилятором MinGW 4.9.1 - не работает.
В Code::Blocks 13.12 c компилятором 4.8.1 - не работает.
Винда - 8.1

Попробую на другом компе.
0
1453 / 790 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
19.07.2015, 19:52 10
cstring подключен?
1
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
19.07.2015, 20:23  [ТС] 11
Цитата Сообщение от DiffEreD Посмотреть сообщение
cstring подключен?
Подключен. В реализации класса в 3 строке кода (код под спойлером скрыт).

Добавлено через 24 минуты
На другом компе с Windows XP та же симптоматика. Не работает. Открывает заголовочник класса cstring и тычет мне в него. Чего хочет - не могу понять.

Добавлено через 1 минуту
бла-бла-бла has not been declared. Замечательно, блин! Мне чё, самому cstring править? Чушь какая-то...
0
29 / 38 / 6
Регистрация: 04.10.2014
Сообщений: 161
19.07.2015, 20:30 12
А тут примеры с старого и надежного источника все <ctring>(string.h) функции подключаются в глобальное пространство имен и работают напрямую.
Не верите - проверьте )). Там как раз и с примерами.
http://www.cplusplus.com/reference/cstring/

И там в упражнении твоем подключается заголовок "string2.h", а не "string.h"
Ой извиняюсь - но реально бредовый вопрос какой то )).
1
1453 / 790 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
19.07.2015, 20:45 13
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

gru74ik, у меня твой код тоже не запустился. Даже на простом примере не запускаеться:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cstring>
 
 
int main()
{
   const char str[] = "How many characters does this string contain?";
 
   std::cout << "without null character: " << std::strlen(str) << '\n'
             << "with null character: " << sizeof str << '\n';
}
Полная очистка и пересборка не помогает.
А если создать новый чистый проект - то все работает. У меня Qt Creator 3.4.2 + MinGW 5.1.0

Добавлено через 13 минут
Проблема разгадана - надо переименовать заголовочный файл string.h
1
:)
Эксперт С++
4765 / 3259 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
19.07.2015, 20:51 14
Цитата Сообщение от DiffEreD Посмотреть сообщение
А если создать новый чистый проект - то все работает.
А как он получился сначала "не чистый"?
gru74ik, проект в архиве можешь выложить?
1
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
20.07.2015, 04:14  [ТС] 15
DiffEreD, если ты о String.h (который подключен в 5 строке) - это пользовательский класс. С заглавной буквы S.
А для strlen, strcpy подключен вполне себе нормальный cstring.
Но я попробую переименовать пользовательский класс. Хотя это странно. Названия классов ведь регистрозависимые же. Классы string.h и String.h должны интерпретироваться как разные.
0
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
20.07.2015, 04:16  [ТС] 16
Tulosba, вот:
0
Вложения
Тип файла: rar sp_Ch12_Pg656_Ex02.rar (17.2 Кб, 5 просмотров)
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
20.07.2015, 09:13  [ТС] 17
Цитата Сообщение от Redee Посмотреть сообщение
И там в упражнении твоем подключается заголовок "string2.h", а не "string.h"
Внимательнее, ребят. У Праты в примере имеется пользовательский класс String (с большой буквы), а файлы, содержащие объявление и определение класса, соответственно - "string2.h" и "string2.cpp" (с маленькой буквы).

Как по мне, такой подход только запутывает. Поэтому я назвал свой класс - String (с большой буквы), и файлы назвал так же - String.h" и "String.cpp" (с большой буквы).

Цитата Сообщение от Redee Посмотреть сообщение
Ой извиняюсь - но реально бредовый вопрос какой то )).
Чем бредовый вопрос-то? Я не могу понять, где ошибся и почему компилятор мне гору каких-то ошибок вываливает. Вы если хотите помочь - благодарю, низкий поклон. Если не хотите или не можете, проходите мимо, пожалуйста.

Добавлено через 5 минут
Цитата Сообщение от gru74ik Посмотреть сообщение
Но я попробую переименовать пользовательский класс.
Создал новый проект. Переименовал в из String в Xtring
Странно, но это помогло. Не пойму почему. Мистика какая-то.
0
Вложения
Тип файла: rar sp_Ch12_Pg656_Ex02.rar (34.0 Кб, 2 просмотров)
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
20.07.2015, 09:34  [ТС] 18
Подправил метод конкатенации строк, чтоб не падала:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// concatenates two Xtrings to one
Xtring operator+(const Xtring & st1, const Xtring & st2)
{
    Xtring result;
    result.len = st1.len;
    delete [] result.str;
    result.str = new char[result.len + 1];
    std::strcpy(result.str, st1.str);
    std::strcat(result.str, st2.str);
    result.len = std::strlen(result.str);
 
    return result;
}
0
1453 / 790 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
20.07.2015, 09:40 19
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

gru74ik, переименовывать класс не обязательно. Достаточно сменить название заголовочного файла с String.h на любое другое (видимо верхний регистр просто игнорируеться).
1
Эксперт CЭксперт С++
5053 / 2237 / 330
Регистрация: 20.02.2013
Сообщений: 5,600
Записей в блоге: 24
20.07.2015, 10:00  [ТС] 20
Цитата Сообщение от DiffEreD Посмотреть сообщение
Достаточно сменить название заголовочного файла с String.h на любое другое (видимо верхний регистр просто игнорируеться).
Похоже, так и есть. Но это странно. Так же не должно быть?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2015, 10:00

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

Std:: или using namespace std;
Вопрос к профессионалам. Меня давно интересуют такие вопросы: 1) Почему, многим, вроде бы не...

Отличие CString от std::string
Меня интересует такой глупый вопрос В чём отличия CString от просто string? :-[

Using namespace std
В чем отличие, если один cout (или что-то другое) будет в std, а другой stdd, для чего вообще using...

std:: vs namespace
Тема не для холивара, объясните пожалуйста чем лучше std:: а не using namespace std ? Без...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.