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

Есть ли ошибки - C++

Восстановить пароль Регистрация
 
Valik_000
1 / 1 / 0
Регистрация: 21.04.2013
Сообщений: 115
05.03.2014, 20:41     Есть ли ошибки #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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <new>
#include <cstring>
#include <iostream>
using namespace std;
// начало объявления класса
enum color {red, gren, blue};
class monstr // имя самого класса
{ 
public: // спецификатор доступа
static int count;
private: 
int health, ammo;
color skin; // цвет самого монстра
char *name; // имя монстра
public:
monstr (); // Объявление контруктора который подсчитывает объекты
monstr (int he, int am); // Обьявление конструктора 1
monstr (color sk); // Обьявление конструктора 2
monstr (const char *nam); // Обьявление конструктора 3
//monstr (const monstr &m1); // Обьявление конструктора копирования
monstr &the_best(monstr &m)
{
if (health > m.health)
return *this;
return m;
}
monstr &the_ammo(monstr &a)
{
if (ammo > a.ammo)
return *this;
return a;
} 
int get_health()
{ return health; }
 
int get_ammo()
{ return ammo; }
void show ();
};
// Расписываются конструкторы
monstr::monstr()
{
count ++;
}
 
monstr::monstr (int he=100, int am=10) // Значение класса по умолчанию
{
health = he;
ammo = am;
skin = red;
name = new char [strlen ("Anonymous")+1];
}
 
monstr::monstr(color sk) // Жизни соответствующие цвету
{
switch (sk) 
{ case red: health=100; ammo=10; skin=red; name = new char [strlen ("Anonymous")+1]; break;
case blue: health=100; ammo=20; skin=blue; name = new char [strlen ("Anonymous")+1];break;
case gren: health=100; ammo=30; skin=gren; name = new char [strlen ("Anonymous")+1];break; 
}
}
 
monstr::monstr (const char *nam)
{
name = new char [strlen ("Anonymous")+1]; // больше на 1 единицу, 1-й байт признак конца строки
strcpy(name,nam);
health=100; ammo=10; skin=red;
}
 
monstr::monstr (const monstr &m1) // Реализация конструктора копирования
{
if(m1.name)
name = new char [strlen (m1.name)+1];
name=m1.name;
}
health=m1.health; ammo=m1.ammo;
count++
}
} 
 
monstr::monstr the_best(monstr &m)
{
if (health > m.health)
return *this;
return m;
}
 
monstr::monstr the_ammo(monstr &a)
{
if (ammo > m.ammo)
return *this;
return m;
}
 
// ********************************* //
void monstr::show()
{
cout «"Имя"«*name;
cout «"Heath"«health;
cout «"Ammo"«ammo;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2014, 20:41     Есть ли ошибки
Посмотрите здесь:

Есть код нужно исправить ошибки C++
Есть пример.Поиск ошибки.dev-C++ C++
Шаблоны функций. Есть ошибки C++
Что есть причиной ошибки? C++
C++ Есть ли ошибки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
05.03.2014, 20:50     Есть ли ошибки #2
Первое что кидается в глаза это содержание класса, по умолчанию все содержимое класса private, поэтому все к чему Вы хотите закрыть доступ, могли бы просто объявить в начале класса, при этом private писать не обезательно (хотя не запрещено). А вообще я не нашел int main().
Valik_000
1 / 1 / 0
Регистрация: 21.04.2013
Сообщений: 115
05.03.2014, 20:56  [ТС]     Есть ли ошибки #3
Цитата Сообщение от Drusha Посмотреть сообщение
private
Да вот я c int main () еще не разобрался , вот пока с классом , компилятор ругается (((
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
05.03.2014, 21:01     Есть ли ошибки #4
Может я все как-то не правильно понял но:
В какой же части программы начало? Каждая программа в C++ имеет одну функцию, её называют главная или main-функция, выполнение программы начинается именно с этой функции.
А вообще от куда этот код, или опишите условия упражнения. Вообщем непонятно.
Valik_000
1 / 1 / 0
Регистрация: 21.04.2013
Сообщений: 115
05.03.2014, 21:06  [ТС]     Есть ли ошибки #5
Цитата Сообщение от Drusha Посмотреть сообщение
код
Создать класс монстр , создавать монстров , жизни и оружие регулируются по цвету , и сравнить по жизням и оружию
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.03.2014, 21:08     Есть ли ошибки #6
Там путаница с { и }.... посмотрите....
Вот это что такое?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
monstr::monstr the_best(monstr &m)
{
if (health > m.health)
return *this;
return m;
}
 
monstr::monstr the_ammo(monstr &a)
{
if (ammo > m.ammo)
return *this;
return m;
}
Valik_000
1 / 1 / 0
Регистрация: 21.04.2013
Сообщений: 115
05.03.2014, 21:10  [ТС]     Есть ли ошибки #7
Цитата Сообщение от mustimur Посмотреть сообщение
такое
Методы сравнения жизней и оружия
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
05.03.2014, 21:12     Есть ли ошибки #8
C++
1
2
3
4
5
6
monstr::monstr the_ammo(monstr &a)
{
if (ammo > m.ammo)
return *this;
return m;
}
тут явно ошибочка, замените m на a
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.03.2014, 21:12     Есть ли ошибки #9
А вот это тогда что?
C++
1
2
3
4
5
6
7
8
9
10
11
12
monstr &the_best(monstr &m)
{
if (health > m.health)
return *this;
return m;
}
monstr &the_ammo(monstr &a)
{
if (ammo > a.ammo)
return *this;
return a;
}
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
05.03.2014, 21:16     Есть ли ошибки #10
Цитата Сообщение от mustimur Посмотреть сообщение
А вот это тогда что?
Ну на вид кроме ошибки которую я описал выше, не вижу ничего, в первом приведенных Вами функциях, сравнивает переменные health класса который вызвал функцию и m.health аргумента и возвращает класс в котором эта переменная больше. Во втором тоже самое.
___________________

Дошло, он их продублировал. Строки 27-39 повторяются 81-93.
Valik_000
1 / 1 / 0
Регистрация: 21.04.2013
Сообщений: 115
05.03.2014, 21:17  [ТС]     Есть ли ошибки #11
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
#include <new>
#include <cstring>
#include <iostream>
using namespace std;
// начало объявления класса
enum color {red, gren, blue};
class monstr // имя самого класса
{    
public:      // спецификатор доступа
     static int count;
private: 
     int health, ammo;
     color skin; // цвет самого монстра
     char *name; // имя монстра
public:
monstr ();                      // Объявление контруктора который подсчитывает объекты
monstr (int he, int am);        // Обьявление конструктора 1
monstr (color sk);              // Обьявление конструктора 2
monstr (const char *nam);       // Обьявление конструктора 3
//monstr (const monstr &m1);    // Обьявление конструктора копирования
monstr the_best(monstr &m)
{
if (health > m.health)
return *this;
return m;
}
monstr the_ammo(monstr &a)
{
if (ammo > a.ammo)
return *this;
return a;
}           
int get_health()
     { return health; }
 
int get_ammo()
     { return ammo; }
void show ();
};
// Расписываются конструкторы
monstr::monstr()
{
count ++;
}
 
monstr::monstr (int he=100, int am=10) // Значение класса по умолчанию
{
   health = he;
   ammo = am;
   skin = red;
   name = new char [strlen ("Anonymous")+1];
}
monstr::monstr(color sk)  // Жизни соответствующие цвету
{
switch (sk)       
{ case red: health=100; ammo=10; skin=red; name = new char [strlen ("Anonymous")+1]; break;
  case blue: health=100; ammo=20; skin=blue; name = new char [strlen ("Anonymous")+1];break;
  case gren: health=100; ammo=30; skin=gren; name = new char [strlen ("Anonymous")+1];break; 
}
}
monstr::monstr (const char *nam)
{
name = new char [strlen ("Anonymous")+1]; // больше на 1 единицу, 1-й байт признак конца строки
strcpy(name,nam);
health=100; ammo=10; skin=red;
}      
monstr::monstr (const monstr &m1) // Реализация конструктора копирования
{
if(m1.name)
name = new char [strlen (m1.name)+1];
name=m1.name;
}
health=m1.health; ammo=m1.ammo;
count++
}
} 
 
 
// ********************************* //
 
 
 
 
void monstr::show()
{
cout <<"Имя"<<*name;
cout <<"Heath"<<health;
cout <<"Ammo"<<ammo;
}
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.03.2014, 21:19     Есть ли ошибки #12
Само это уже ошибка
Цитата Сообщение от Drusha Посмотреть сообщение
monstr::monstr the_ammo(monstr &a)
monstr::monstr() - это конструктор;
monstr &monstr::the_best(monstr &m) - это должно было выглядеть как то так... Но код-то есть раньше...
Valik_000
1 / 1 / 0
Регистрация: 21.04.2013
Сообщений: 115
05.03.2014, 21:44  [ТС]     Есть ли ошибки #13
Цитата Сообщение от mustimur Посмотреть сообщение
monstr::monstr() - это конструктор
Да конструктор , а вот с методом сравнения я колеблюсь в его правильности

Добавлено через 21 минуту
Sos
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
05.03.2014, 22:01     Есть ли ошибки #14
Попробуйте так (просто передавая для сравнения два аргумента по ссылке):
C++
1
2
3
4
5
6
7
8
9
10
11
12
void the_best(monstr &m, monstr &n)
{
if (m.health > n.health)
return m;
return n;
}
void the_ammo(monstr &a, monstr &b)
{
if (a.ammo > b.ammo)
return a;
return b;
}
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
05.03.2014, 22:39     Есть ли ошибки #15
Цитата Сообщение от Drusha Посмотреть сообщение
Попробуйте так (просто передавая для сравнения два аргумента по ссылке):
Как это в void есть return?

Добавлено через 4 минуты
Цитата Сообщение от Valik_000 Посмотреть сообщение
Да конструктор , а вот с методом сравнения я колеблюсь в его правильности
Выберите один, а то Вы их два попытались создать, при чем второй явно не правильно объявлен...

Добавлено через 1 минуту
Простите не посмотрел Ваш второй код)
Drusha
6 / 6 / 0
Регистрация: 16.07.2013
Сообщений: 74
06.03.2014, 00:07     Есть ли ошибки #16
Цитата Сообщение от mustimur Посмотреть сообщение
Как это в void есть return?
затупил...
Valik_000
1 / 1 / 0
Регистрация: 21.04.2013
Сообщений: 115
12.03.2014, 22:30  [ТС]     Есть ли ошибки #17
Цитата Сообщение от mustimur Посмотреть сообщение
Как это в void
Можете помочь с int main () ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 07:18     Есть ли ошибки
Еще ссылки по теме:

C++ Есть ли ошибки в следующем фрагменте кода?
C++ Успешное компилирование, но есть ошибки
C++ Правильно ли сделана программа есть ли ошибки

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

Или воспользуйтесь поиском по форуму:
mustimur
268 / 222 / 57
Регистрация: 22.11.2013
Сообщений: 832
Записей в блоге: 1
13.03.2014, 07:18     Есть ли ошибки #18
Можете помочь с int main () ?
попробую выкладывайте ваш вариант и посмотрим
Yandex
Объявления
13.03.2014, 07:18     Есть ли ошибки
Ответ Создать тему
Опции темы

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