Форум программистов, компьютерный форум CyberForum.ru

'stricmp' undeclared (first use this function) - C++

Восстановить пароль Регистрация
 
ЗасланеЦ
 Аватар для ЗасланеЦ
1 / 1 / 0
Регистрация: 11.12.2012
Сообщений: 63
08.06.2013, 11:46     'stricmp' undeclared (first use this function) #1
Пытаюсь откомпилировать такой код из книги "С++ для чайников":
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
// DataSet - store associated data in
//             an array of objects
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <string.h>
using namespace std;
 
// NameDataSet - stores name and credit card
//               information
class NameDataSet
{
  public:
    char firstName[128];
    char lastName [128];
    int  creditCard;
};
 
// function prototypes:
bool getData(NameDataSet& nds);
void displayData(NameDataSet& nds);
 
int main(int nNumberofArgs, char* pszArgs[])
{
    // allocate space for 25 name data sets
    const int MAX = 25;
    NameDataSet nds[MAX];
 
    // load first names, last names and social
    // security numbers
    cout << "Read name/credit card information\n"
         << "Enter 'exit' to quit"
         << endl;
    int index = 0;
    while (getData(nds[index]) && index < MAX)
    {
        index++;
    }
 
    // display the names and numbers entered
    cout << "\nEntries:" << endl;
    for (int i = 0; i < index; i++)
    {
        displayData(nds[i]);
    }
 
    // wait until user is ready before terminating program
    // to allow the user to see the program results
    system("PAUSE");
    return 0; 
}
 
// getData - populate a NameDataSet object
bool getData(NameDataSet& nds)
{
    cout << "\nEnter first name:";
    cin  >> nds.firstName;
 
    // compare the name input irrespective of case
    if (stricmp(nds.firstName, "exit") == 0)
    {
        return false;
    }
 
    cout << "Enter last name:";
    cin  >> nds.lastName;
 
    cout << "Enter credit card number:";
    cin  >> nds.creditCard;
 
    return true;
}
 
// displayData - display a data set
void displayData(NameDataSet& nds)
{
    cout << nds.firstName
         << " "
         << nds.lastName
         << "/"
         << nds.creditCard
         << endl;
}
Выходит ошибка ['stricmp' undeclared (first use this function)]
Если заменить stricmp на просто strcmp, то программа компилируется, только она уже чувствительна к регистру слова exit

Заглянул в файл string.h в папке Dev-Cpp\include - там есть строки со словом stricmp и даже _stricmp

Почему так происходит, в чем проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
08.06.2013, 12:00     'stricmp' undeclared (first use this function) #2
У меня в Dev-Cpp Ваш код компилится без пробел.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
08.06.2013, 12:07     'stricmp' undeclared (first use this function) #3
Цитата Сообщение от ЗасланеЦ Посмотреть сообщение
C++
1
stricmp
These POSIX functions are deprecated beginning in Visual C++ 2005. Use the ISO C++ conformant _stricmp, _wcsicmp, _mbsicmp, _stricmp_l, _wcsicmp_l, _mbsicmp_l instead.
То есть, нужно
C++
1
_stricmp
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
08.06.2013, 12:16     'stricmp' undeclared (first use this function) #4
Цитата Сообщение от Мимино Посмотреть сообщение
These POSIX functions are deprecated beginning in Visual C++ 2005
Это VS , а человек пишет на Dev-Cpp
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
08.06.2013, 12:21     'stricmp' undeclared (first use this function) #5
Цитата Сообщение от Игорь с++ Посмотреть сообщение
Это VS , а человек пишет на Dev-Cpp
Если первая же ссылка в гугле дает понять, что такая запись функции устарела, то почему бы не попробовать? Секунда дела.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
08.06.2013, 12:31     'stricmp' undeclared (first use this function) #6
Цитата Сообщение от Мимино Посмотреть сообщение
то почему бы не попробовать?
потому что -
Цитата Сообщение от Игорь с++ Посмотреть сообщение
У меня в Dev-Cpp Ваш код компилится без пробел.
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
08.06.2013, 12:51     'stricmp' undeclared (first use this function) #7
Вот нет, чтобы просто помочь человеку... надо ничего не сказать, а опровергнуть попытки всех других

ЗасланеЦ,
Попробуйте так:
C++
1
stricmp
заменить на
C++
1
strcasecmp
З.Ы. в онлайн компиляторе это помогло. До замены выдавало такую же ошибку, как и у Вас.
ЗасланеЦ
 Аватар для ЗасланеЦ
1 / 1 / 0
Регистрация: 11.12.2012
Сообщений: 63
08.06.2013, 13:24  [ТС]     'stricmp' undeclared (first use this function) #8
Пробовал _stricmp, strcasecmp - результат тот-же

Dev-Cpp 4.9.9.2 если что
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
08.06.2013, 13:37     'stricmp' undeclared (first use this function) #9
Вот еще нашел тут на форуме
ну в руководстве к Dev где-то было сказано, что подключать надо именно <string>, а не <string.h>
<string> для использования класса string , <cstring> для использования функций вида strlen(..), strcmp(..)
Попробуйте
ЗасланеЦ
 Аватар для ЗасланеЦ
1 / 1 / 0
Регистрация: 11.12.2012
Сообщений: 63
08.06.2013, 13:50  [ТС]     'stricmp' undeclared (first use this function) #10
Нм в какую не хочет ни string ни cstring
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
08.06.2013, 14:13     'stricmp' undeclared (first use this function) #11
Цитата Сообщение от ЗасланеЦ Посмотреть сообщение
Заглянул в файл string.h в папке Dev-Cpp\include - там есть строки со словом stricmp и даже _stricmp
А покажите

Добавлено через 14 минут
Поставил Dev C++ 5.4.1 Проблем нет, код компилится

Добавлено через 2 минуты
Вот еще нашел.... а добавьте
C++
1
#include <strings.h>
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
08.06.2013, 14:17     'stricmp' undeclared (first use this function) #12
ЗасланеЦ, снеси свой Dev и поставь вот этот.
Вложения
Тип файла: rar devcpp-4.9.9.2_setup.rar (8.89 Мб, 3 просмотров)
ЗасланеЦ
 Аватар для ЗасланеЦ
1 / 1 / 0
Регистрация: 11.12.2012
Сообщений: 63
08.06.2013, 15:04  [ТС]     'stricmp' undeclared (first use this function) #13
Цитата Сообщение от Мимино Посмотреть сообщение
А покажите

Добавлено через 14 минут
Поставил Dev C++ 5.4.1 Проблем нет, код компилится

Добавлено через 2 минуты
Вот еще нашел.... а добавьте
C++
1
#include <strings.h>
ну вот например

C++
1
2
3
4
5
...
_CRTIMP int __cdecl _stricmp (const char*, const char*);
...
_CRTIMP int __cdecl stricmp (const char*, const char*);
...
Добавлено через 2 минуты
strings.h не пашет

Цитата Сообщение от Игорь с++ Посмотреть сообщение
ЗасланеЦ, снеси свой Dev и поставь вот этот.
хэш суммы вашего сетупа совпадают с моим
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
08.06.2013, 15:35     'stricmp' undeclared (first use this function) #14
Копаем дальше
C++
1
2
// Extra non-ANSI functions provided by the CRTDLL library
_CRTIMP int __cdecl __MINGW_NOTHROW _stricmp (const char*, const char*);
C++
1
2
3
4
5
6
/*
 * Non-underscored versions of non-ANSI functions. They live in liboldnames.a
 * and provide a little extra portability. Also a few extra UNIX-isms like
 * strcasecmp.
 */
_CRTIMP int __cdecl __MINGW_NOTHROW stricmp (const char*, const char*);
Что означает комментарий перед прототипами функций? Я еще "маленький" и не совсем понимаю, а без уверенности предположения не буду выдвигать.
Убежденный
Системный программист
 Аватар для Убежденный
14173 / 6188 / 981
Регистрация: 02.05.2013
Сообщений: 10,295
Завершенные тесты: 1
08.06.2013, 15:48     'stricmp' undeclared (first use this function) #15
Цитата Сообщение от ЗасланеЦ Посмотреть сообщение
Пытаюсь откомпилировать такой код из книги "С++ для чайников":

...

Выходит ошибка ['stricmp' undeclared (first use this function)]
Насколько я знаю, stricmp и strcmpi - это нестандартные функции, которые
компилятор не обязан реализовывать. Поэтому используйте или платформенные
средства, или, если требуется переносимость, класс std::collate.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
08.06.2013, 19:17     'stricmp' undeclared (first use this function) #16
Цитата Сообщение от ЗасланеЦ Посмотреть сообщение
хэш суммы вашего сетупа совпадают с моим
и что , а корявый компилятор ты не допускаешь?Ты вообще чего нибудь компилил на нём ?Я тебе дал ту версию на которой я скомпилировал твой код без проблем , а ты мне тут про хэш рассказываеш, впрочем твои проблемы.
ЗасланеЦ
 Аватар для ЗасланеЦ
1 / 1 / 0
Регистрация: 11.12.2012
Сообщений: 63
09.06.2013, 17:25  [ТС]     'stricmp' undeclared (first use this function) #17
Цитата Сообщение от Игорь с++ Посмотреть сообщение
и что , а корявый компилятор ты не допускаешь?Ты вообще чего нибудь компилил на нём ?Я тебе дал ту версию на которой я скомпилировал твой код без проблем , а ты мне тут про хэш рассказываеш, впрочем твои проблемы.
Я установил ваш компилятор, но результат тот-же, но может просто дело в том, как установился компилятор, или в операционной системе, ну да черт с этой функцией

Во всяком случае спасибо за установщик
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
09.06.2013, 19:28     'stricmp' undeclared (first use this function) #18
вот список где в Dev-cpp встречается упоминание о stricmp -
windowsx.h
tchar.h
string.h
попробуй приинклюдь их все , посмотри , что скажет компилятор.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2013, 21:12     'stricmp' undeclared (first use this function)
Еще ссылки по теме:

Замен стандартной функции stricmp C++
C++ `endl' undeclared (first use in this function)
C++ Бьёт ошибку! 11 D:\Ïðàêòèêà ïo C++\Çàäà÷à 15\main.cpp `nullptr' undeclared (first use this function)

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,398
09.06.2013, 21:12     'stricmp' undeclared (first use this function) #19
Цитата Сообщение от ЗасланеЦ Посмотреть сообщение
Dev-Cpp 4.9.9.2
именно он компилит без проблем. Нестандартная функция, можно пробовать использовать с _ перед названием, хотя на деве должно итак идти без проблем, в конце-концов автор книги именно на нем и тестировал.
Yandex
Объявления
09.06.2013, 21:12     'stricmp' undeclared (first use this function)
Ответ Создать тему
Опции темы

Текущее время: 06:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru