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

Не задикларированные идентифайлы. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
Sabrina
74 / 1 / 1
Регистрация: 19.09.2009
Сообщений: 27
04.07.2010, 18:47     Не задикларированные идентифайлы. #1
ни как не могу понять почему пишет столько ошибок что эти файлы не за декларированные?
как справиться с этими ошибками подскажите будте добры?
main.cpp(9) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
include\string.h(74) : see declaration of 'strcpy'
main.cpp(15) : error C2065: 'cout' : undeclared identifier
main.cpp(15) : error C2065: 'endl' : undeclared identifier
main.cpp(16) : error C2065: 'cout' : undeclared identifier
main.cpp(16) : error C2065: 'endl' : undeclared identifier
main.cpp(17) : error C2065: 'cout' : undeclared identifier
main.cpp(17) : error C2065: 'endl' : undeclared identifier
main.cpp(18) : error C2065: 'cout' : undeclared identifier
main.cpp(18) : error C2065: 'endl' : undeclared identifier
main.cpp(20) : error C2039: 'Input' : is not a member of 'Person'
main.h(1) : see declaration of 'Person'
main.cpp(22) : error C2065: 'cout' : undeclared identifier
main.cpp(23) : error C2065: 'cin' : undeclared identifier
main.cpp(23) : error C2065: 'number' : undeclared identifier
main.cpp(24) : error C2065: 'cout' : undeclared identifier
main.cpp(25) : error C2065: 'cin' : undeclared identifier
main.cpp(25) : error C2065: 'fio' : undeclared identifier
main.cpp(26) : error C2065: 'cout' : undeclared identifier
main.cpp(27) : error C2065: 'cin' : undeclared identifier
main.cpp(27) : error C2065: 'pol' : undeclared identifier
main.cpp(28) : error C2065: 'cout' : undeclared identifier
main.cpp(29) : error C2065: 'cin' : undeclared identifier
main.cpp(29) : error C2065: 'age' : undeclared identifier
main.cpp(34) : error C2065: 'name' : undeclared identifier
main.cpp(37) : error C2065: 'name1' : undeclared identifier
main.cpp(41) : error C2039: 'Input' : is not a member of 'Person'
\main.h(1) : see declaration of 'Person'


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
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include "main.h"
 
Person::Person(int Number, char FIO[45], int Pol, float Age)
{
number = Number;
strcpy(fio, FIO);
pol = Pol;
age = Age;
}
void Person::print()
{
    cout << "Number: " << number << endl;
    cout << "FIO: " << fio << endl;
    cout << "Pol: " << pol << endl;
    cout << "Age: " << age << endl;
}
void Person::Input()
{
    cout << "Number -> ";
    cin >> number;
    cout << "FIO -> ";
    cin >> fio;
    cout << "Pol -> ";
    cin >> pol;
    cout << "Age -> ";
    cin >> age;
}
int main ()
{
Person:
  class Person pers(5, name, 0, 25);
  pers.print();
  class Person *pers1;
  pers1 = new Person(6, name1, 0, 30);
  pers1->print();
  delete pers1;
  class Person pers2;
  pers2.Input();
  pers2.print();
  return(0);
}
C++
1
2
3
4
5
6
7
8
9
10
11
class Person{
private:
  int number;
  char fio[45];
  int pol;
  float age;
public:
void print();
Person(int Number, char FIO[45], int Pol, float Age);
Person();
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
04.07.2010, 18:52     Не задикларированные идентифайлы. #2
cin, cout, endl определены в пространстве имен std

Добавлено через 2 минуты
попрвьте файл имплиментации
C++
1
2
3
4
5
6
7
#include <iostream>
#include <cstdlib>
#include <cstring>
#include "main.h"
using namespace std;
 
// ...
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
04.07.2010, 18:54     Не задикларированные идентифайлы. #3
Цитата Сообщение от Sabrina Посмотреть сообщение
как справиться с этими ошибками подскажите будте добры?
После директив #include написать строчку

C++
1
using namespace std;
Или везде в коде явно указывать пространство имен.

C++
1
2
3
std::cout ...
std::cin ...
std::endl ...
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
04.07.2010, 18:58     Не задикларированные идентифайлы. #4
Цитата Сообщение от Sabrina Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
class Person{
private:
int number;
char fio[45];
int pol;
float age;
public:
void print();
Person(int Number, char FIO[45], int Pol, float Age);
Person();
};
а это сюдя по всему файл main.h?

его нужно обрамить вот такой конструкцией

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef _MAIN_H_
#define _MAIN_H_
class Person{
private:
  int number;
  char fio[45];
  int pol;
  float age;
public:
void print();
Person(int Number, char FIO[45], int Pol, float Age);
Person();
};
#endif
это обезопасит от повторного инклуда одного и того же хидера.

Добавлено через 3 минуты
Цитата Сообщение от Sabrina Посмотреть сообщение
warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
ну а этот варн говорит Вам о том, что небезопасно использовать данную функцию. (strcpy())
Sabrina
74 / 1 / 1
Регистрация: 19.09.2009
Сообщений: 27
04.07.2010, 19:16  [ТС]     Не задикларированные идентифайлы. #5
да я догадывалась что проблема в этом спасибо ошибок стало поменьше , но всё таки остались (
:
main.cpp(10) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
string.h(74) : see declaration of 'strcpy'
main.cpp(21) : error C2039: 'Input' : is not a member of 'Person'
main.h(1) : see declaration of 'Person'
main.cpp(24) : error C2065: 'number' : undeclared identifier
main.cpp(26) : error C2065: 'fio' : undeclared identifier
main.cpp(28) : error C2065: 'pol' : undeclared identifier
main.cpp(30) : error C2065: 'age' : undeclared identifier
main.cpp(35) : error C2065: 'name' : undeclared identifier
main.cpp(38) : error C2065: 'name1' : undeclared identifier
main.cpp(42) : error C2039: 'Input' : is not a member of 'Person'
main.h(1) : see declaration of 'Person'

и самое главное не пойму из за чего эти ошибки:
main.cpp(10) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
string.h(74) : see declaration of 'strcpy'

Добавлено через 1 минуту
ой уже ответили )

Добавлено через 21 секунду
ну да это хедер файл
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
04.07.2010, 19:16     Не задикларированные идентифайлы. #6
Цитата Сообщение от Sabrina Посмотреть сообщение
main.cpp(24) : error C2065: 'number' : undeclared identifier
main.cpp(26) : error C2065: 'fio' : undeclared identifier
main.cpp(28) : error C2065: 'pol' : undeclared identifier
main.cpp(30) : error C2065: 'age' : undeclared identifier
main.cpp(35) : error C2065: 'name' : undeclared identifier
main.cpp(38) : error C2065: 'name1' : undeclared identifier
Тут ошибка говорит сама за себя. Объявлять то переменные не надо забывать. Например:

C++
1
2
3
4
int number = Number;
strcpy(fio, FIO);
int pol = Pol;
float age = Age;
Sabrina
74 / 1 / 1
Регистрация: 19.09.2009
Сообщений: 27
04.07.2010, 19:17  [ТС]     Не задикларированные идентифайлы. #7
ну а этот варн говорит Вам о том, что небезопасно использовать данную функцию. (strcpy())
а что это значит и как от этого лечиться? ни когда с таким не сталкивалась(
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
04.07.2010, 19:18     Не задикларированные идентифайлы. #8
Цитата Сообщение от Sabrina Посмотреть сообщение
main.cpp(42) : error C2039: 'Input' : is not a member of 'Person'
Так где в main.h упоминанием об этом методе?
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
04.07.2010, 19:58     Не задикларированные идентифайлы. #9
Цитата Сообщение от Sabrina Посмотреть сообщение
а что это значит и как от этого лечиться? ни когда с таким не сталкивалась(
Sabrina, это достаточно сложная тема, чтобы объяснять ее на пальцах. Если интересно почитай Криса Касперски и т.д. А вообще функция strcpy() копирует строки с завершающим нулем. например
C++
1
strcpy(fio, FIO);
здесь копируется строка, находящаяся по указателю FIO в строку, находящуюся по указателю fio. Основная проблема в том, что если в массиве, на который указвает FIO, окажется не нулевых символов больше, чем задекларировано размер строковом массива по указателю fio, то произойдет так называемое переполнение буфера. Эту уязвимость уже можно использовать для исполнения своего кода с правами пользователя, который запустил данную программу.

Лечится только отказом от использования strcpy() в пользу strncpy() которая умеет копировать столько символов сколько указано при ее вызове. Либо вообще от использования OLD-style строк в пользу std::string.

Ну еще можно задисаблить варн, но это имхо тактика страуса :-)
Yandex
Объявления
04.07.2010, 19:58     Не задикларированные идентифайлы.
Ответ Создать тему
Опции темы

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