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

Непонятные ошибки - C++

Восстановить пароль Регистрация
 
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
13.09.2011, 02:31     Непонятные ошибки #1
Пытаюсь скомпилировать код, а компилятор мне ошибки под ребро суёт. Как исправить ошибки?
Вот пример №1:
*.cpp
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
#include "strf.h"
 
int main()
{
 STRF str;
 return 0;
}
 
 STRF::STRF()
{ 
  //athlete *all = NULL;
  char f1_name[20], f2_name[20];
  int count;
  count = 0;
  clrscr();
  cout << "Введите имя файла F1: ";
  cin >> f1_name;
  cout << "Введите имя файла F2 (бинарный): ";
  cin >> f2_name;
  cout << "Введите количество спортсменов: ";
  cin >> count;
  process(count, f1_name, f2_name);
  getch();
}
 
 void STRF::process(int count, char *f1_name, char *f2_name)
{
   int i, imin = 0;
   all = new athlete[count];
   fstream f1(f1_name, ios::in | ios::out);
   if (f1.fail())
     {
       cout << "F1 Ошибка!" << f1.rdstate() << endl;
     }
   fstream f2(f2_name, ios::in | ios::binary | ios::out);
   if (f2.fail())
     {
       cout << "F2 Ошибка!" << f2.rdstate() << endl;
     }
   cout << "Введите данные о спортсменах\n"
         "(имя, фамилия, возраст, результат в мин. и сек. через пробел):\n";
   for (i = 0; i < count; ++i)
     {
        cout << i + 1 << ". ";
        cin >> all[i].name;
        cin >> all[i].f_name;
        cin >> all[i].age;
        cin >> all[i].time.imin;
        cin >> all[i].time.sec;
     }
  
   f1 << "\nПроверка считывания из F2: \n";
   f2.seekg(0,ios::beg);
   for(i=0; i<count; i++)
   f2.write((char *)&all[i], sizeof(athlete));
   f2.seekp(0, ios::beg);
   for(i=0;i<count;i++)
   {
       f2.read((char *)&all[i], sizeof(athlete));
       f1.write((char *)&all[i], sizeof(athlete));
   }
   for (int k = 0; k < count; k++)
   if (k == 0) imin = k;
   else if (all[k].age < all[imin].age) imin = k;
   cout << "\nСамый юный участник:\n";
   cout << "Порядковый номер в реестре: " << imin 
        << "\nИмя: " << all[imin - 1].name 
        << "\nФамилия: " << all[imin - 1].f_name
        << "\nВозраст: " << all[imin - 1].age 
        << "\nРезультат: " << all[imin - 1].time.imin 
        << " мин. " << all[imin - 1].time.sec << " сек. ";
 
   ofstream file("F2.bin", ios::out | ios::binary);
   file.write((char *)&all[imin], sizeof(athlete)); 
   file.close();
   f2.close();
   f1.close();
}
*.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
#include <iostream.h>
#include <fstream.h>
#include <string.h>
#include <stdlib.h>
#include <iomanip.h>
#include <conio.h>
 
 class STRF
{
  struct time_s
 {
   int imin;
   int sec;
 };
 
  struct athlete
 {
   char name [20];
   char f_name [20];
   int age;
   time_s time;
 };
    
 public: 
    int imin;
    int count;
    athlete *all;
    STRF();
    
 private:
    void STRF::process(int count, char *f1_name, char *f2_name);
}
Непонятные ошибки

Вот пример №2:
*.cpp
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
#include "TREE.h"
 
void main()
{
 TREE str;
}
 
 TREE::TREE()
{
  int k, e, rez;
  NodePtr t;
  clrscr();
  cout << "Введите ключ К: ";
  cin >> k;
  cout << "\nУпорядоченное  дерево: \n";
  cout << "Bведите числа, конец ввода - Ctrl+Z, Enter: ";
  t = NULL;
  while (cin >> e)
  
  AddTree(t, e); // формирование дерева
  cout << endl;
  TreeOut(t);
  cout << "\nНисходящий метод прохода дерева: " << endl;
  TreeFindNegative(t, k, rez);
  TreeDelete(t);
  
  if (rez == 0) cout << "\nОшибка!" << endl;
  else cout << endl << "Результат: " << rez << endl;
  getch();
}
 
void TREE::TreeFindNegative(NodePtr t, int k, int &rez)
{
  static int n = 0;
 
  if (t == NULL || n >= k) return;
    if (t->key < 0) n++;
       if (n == k) 
         {
          rez = t->key;
          return;
         }
  TreeFindNegative(t->l, k, rez);
  TreeFindNegative(t->r, k, rez);
}
 
void TREE::AddTree(NodePtr &t, int k)
{
  if (t == NULL)
  { //Если t=NULL, то добавить элемент k в дерево
    t = new Node;
    t->key = k;
    t->l = t->r = NULL;
  } 
 else 
  { //Если k >= t->key, то
   if (k >= t->key) AddTree(t->r, k);  //двигаться в правую ветвь,
   else AddTree(t->l, k);  //иначе - в левую ветвь
  }
}
 
void TREE::TreeOut(NodePtr t, int level) //вывод дерева на экран
{
  int tab = 5; // интервал табуляции между уровнями дерева
 
  if (t == NULL)
  cout << "Дерево пусто! \n";
  else 
     {
      if (t->r != NULL) TreeOut(t->r, level + 1); // pекурсивный спуск
                      //до последнего элемента по правой ветви
 
      cout << setw(tab * level) << t->key << endl; 
 
      if (t->l != NULL) TreeOut(t->l, level + 1);
    }
}
 
void TREE::TreeDelete(NodePtr& t) // освобождает память, t <- NULL
{
    if (t != NULL) 
   {
     TreeDelete(t->r);
     TreeDelete(t->l);
     delete t;
     t = NULL;
   }
}
*.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
#include <iostream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <conio.h>
 
 class TREE
{
  struct Node 
 {
   int key;
   Node *l, *r;
 };
 
 
 public:
        TREE();
        ~TREE();
        typedef Node *NodePtr;
        
 private:
        void TREE::TreeFindNegative(NodePtr t, int k, int &rez);
        void TREE::AddTree(NodePtr &t, int k);
        void TREE::TreeOut(NodePtr t, int level);
        void TREE::TreeDelete(NodePtr& t); 
}
Непонятные ошибки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2011, 02:31     Непонятные ошибки
Посмотрите здесь:

C++ непонятные ошибки
Непонятные ошибки(Linker Error) C++
C++ Непонятные ошибки компиляции!!!!
C++ Непонятные ошибки в работе (системы счисления)
C++ Непонятные ошибки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 09:21     Непонятные ошибки #2
maxim43k, собираюсь переписать твой преокт, класс конешно у тебя корявенький(извини если обижаю, просто говорю своё мнение), как я понял программа должна делать всё тоже что и здесь Мусор в файлах????
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
13.09.2011, 18:34  [ТС]     Непонятные ошибки #3
Не обижаешь))) Сам знаю, что всё коряво, но по другому не умею((( Там ошибки из-за того, что точку с запятой после определения класса забыл поставить. Если возможно, то можете подсказать, как правильнее класс написать?

Добавлено через 8 часов 45 минут
Здравствуйте, -=ЮрА=-, Вы можете показать, как правильнее классы составлять?
-=ЮрА=-
Заблокирован
Автор FAQ
13.09.2011, 19:59     Непонятные ошибки #4
Листин CAthlete.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
#ifndef CATHLETE//Объявляем по всем правилам)))
#define CATHLETE
 
#include <windows.h>  //OemToChar - после ввода на руском нужно менять кодировку
                      //(к содалению в  BORLANDE нет OemToChar ((
#include <iostream.h> //i/o
#include <fstream.h>  //fread fwrite
#include <string.h>   //strlenwork with strings
 
//Руссификация
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='ё')
            stream<<char(241);
        else if(*ps=='Ё')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
 
struct time_s
{
    int imin;
    int sec;
};
 
struct athlete
{
   char name   [20];
   char f_name [20];
   int age;
   time_s time;
};
 
class CAthlete
{
private:
    athlete *all;
    int count;
    int imin;
    fstream f1;
    fstream f2;
    ofstream f;
public:
    CAthlete(){all = NULL;};//Пошёл по пути конструктора без параметров
    ~CAthlete()
    {
        Reset();
    }
    void Reset()
    {
        if(all != NULL)
            delete [] all;
    }
    bool SetCount(int _count);
    void process(char *f1_name, char *f2_name);
};
 
//Класс маленький решил не вводить CAthlete.cpp пишу прототипы функций сразу в хедере
 
bool CAthlete::SetCount(int _count)
{
    bool bRet = true;
    Reset();//Очищаем память перед её новым выделением
    if(!(all = new athlete[(count = _count)*sizeof(athlete)]))
        bRet = false;//Ошибка при выделении памяти
    if(!bRet)//Сразу же чистим память в случае ошибки
        Reset();
    return bRet;
}
 
void CAthlete::process(char *f1_name, char *f2_name)
{
    int i, k, imin = 0;
    f1.open(f1_name, ios::in | ios::out);
    if (f1.fail())
    {
       cout << "F1 Ошибка!" << f1.rdstate() << "\r\n";
       return;//Выходим т.к без f1 не сможем работать
    }
    //Если f1 открыли идём дальше
    f2.open(f2_name, ios::in | ios::binary | ios::out);
    if (f2.fail())
    {
       cout << "F2 Ошибка!" << f2.rdstate() << "\r\n";
       return;//Выходим т.к без f2 не сможем работать
    }
    //Если f2 открыли идём дальше
   cout << "\tВведите данные о спортсменах\r\n";
   for (i = 0; i < count; i++)//++i - забудь об этом хоть и быстро но ненадёжно
       //хочешь проверь и поставь ++i со 2-й структуры поле "Имя : " будет пропущено
   {
        cout << "Спортсмен # "<<i + 1 << "\r\n";
        cout << "Имя : ";       cin >> all[i].name;
        OemToChar(all[i].name,all[i].name);    //Меняем кодировку на ANSI
        cout << "Фамилия : ";   cin >> all[i].f_name;
        OemToChar(all[i].f_name,all[i].f_name);//Меняем кодировку на ANSI
        cout << "Возраст : ";   cin >> all[i].age;
        cout << "Результат :\r\n";
        cout << "мин : ";       cin >> all[i].time.imin;
        cout << "сек : ";       cin >> all[i].time.sec;
   }
   
   f2.write((char *)all,count*sizeof(athlete));//Пишем сразу все структуры
   f2.seekg(0,ios::beg);//Позиционируем курсор вначало
   
   char sTitle[] = "Проверка считывания из F2:\r\n";
   f1.write(sTitle,strlen(sTitle));
   for(i = 0;i < count; i++)
   {
       //Читаем по 1-й структуре
       f2.read((char *)&all[i], sizeof(athlete));
       //Пишем по 1-й структуре 
       //(можно было бы вобще и все сразу забросить ну да ладно)
       f1.write((char *)&all[i], sizeof(athlete));
   }
   f2.close();
   f1.close();
   //imin и так == 0
   for (k = 0; k < count; k++)
   {
       if (all[k].age < all[imin].age) 
           imin = k;
   }
   //Зачем здесь было ставить imin - 1
   cout << "\tСамый юный участник:\r\n";
   cout << "Порядковый номер в реестре: "<< imin + 1 <<endl;//А вот тут imin + 1, т.к. нумерация с нуля!
   cout << "Имя: "      << all[imin].name    <<endl;
   cout << "Фамилия: "  << all[imin].f_name  <<endl;
   cout << "Возраст: "  << all[imin].age     <<endl;
   cout << "Результат: " << all[imin].time.imin <<endl;
   cout << "мин. " << all[imin].time.sec << " сек. "<<endl;;
 
   f.open("F2.bin", ios::out | ios::binary);
   f.write((char *)&all[imin], sizeof(athlete)); 
   f.close();
   
}
 
#endif
main.cpp
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
#include "CAthlete.h"
#include <conio.h> //getch
#include <ctype.h> //toupper
 
int main()
{
    CAthlete pAthl;
    char f1_name[20], f2_name[20];
    int count = 0;
    do
    {
        cout << "Введите имя файла F1: ";
        cin  >> f1_name;
        cout << "Введите имя файла F2 (бинарный): ";
        cin  >> f2_name;
        cout << "Введите количество спортсменов: ";
        cin  >> count;
        pAthl.SetCount(count);
        pAthl.process(f1_name,f2_name);
        cout<<"Нажмите клавишу Y для нового ввода\r\n";
    }
    while(toupper(getch()) == 'Y');
        
    return 0;
}
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
13.09.2011, 20:45  [ТС]     Непонятные ошибки #5
Просто я создаю проект из 3 разных заданий: main.cpp, zad1.cpp, zad1.h, zad2.cpp., zad2.h, zad3.cpp, zad3.h
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
13.09.2011, 20:50     Непонятные ошибки #6
maxim43k, описание класса обязательно должно заканчиваться точкой с запятой
C++
1
2
3
class ClassName {
// ...
};
То есть последние строчки в твоих файлах *.h должны выглядеть так
C++
1
};
Добавлено через 50 секунд
А, вижу, что это уже пройденный этап
maxim43k
0 / 0 / 0
Регистрация: 04.09.2011
Сообщений: 106
13.09.2011, 21:56  [ТС]     Непонятные ошибки #7
Почему дерево выводится на экран не по уровням, а в столбик?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2011, 22:08     Непонятные ошибки
Еще ссылки по теме:

Непонятные ошибки C++
C++ Непонятные ошибки линковщика
Непонятные ошибки компиляции C++

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

Или воспользуйтесь поиском по форуму:
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,512
13.09.2011, 22:08     Непонятные ошибки #8
Если вам не обязательно делать проэкт в борланд си++ то не делайте его в этой среде, искать и отлаживать ошибки в новых средах вам будет значительно легче.
Yandex
Объявления
13.09.2011, 22:08     Непонятные ошибки
Ответ Создать тему
Опции темы

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