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

Ошибка компиляции, класс, файлы. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Строки http://www.cyberforum.ru/cpp-beginners/thread329223.html
Заменить все гласные в тексте на звездочку. И подсчитать количество таких букв. Нигде не могу найти, везде есть коды на Паскале, а на С нет.
C++ Операторы cin и scanf Пример кода: void func(float* p){ cout << "Введите значение"; scanf("%f\n", &p); } Как можно прочитать ссылку через cin ? При записи cin >> &p; - ошибка C2678 http://www.cyberforum.ru/cpp-beginners/thread329218.html
C++ и ASM C++
Всем привет. Необходимо посчитать уравнение на языке ASM и вывести ответ на языке С++. Вот готовая программа на ASM с выводом на экран значения. data segment a dw 2 b dw 6 _c dw 12 d dw 3 e dw 5
как добавить рисунок в программу? C++
знаю, что добавляется через меню project -> add resource->bitmap, но эта функция "add resource" неактивная, подскажите как сделать ее активной?
C++ упростить код http://www.cyberforum.ru/cpp-beginners/thread329171.html
есть решена задача, надо упростить, из того перебора в инструкции switch() на enum ( перечисленный тип, мб через рандом но чет не выходит ). // xz.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> using std::cout; using std::cin; using std::endl; #include <ctime>
C++ Вопрос: что такое ключ в списках? Вопрос: что такое ключ в списках? Код из литературы: Функции вставки и удаления элемента в односвязном списке. /*Функция вставки элемента с ключом k в конец списка, заданного указателем *p на его начало */ ft *add(ft *p, int x) { ft *h=new(ft), *c; //выделяем память под элемент h->val=k; //записываем туда ключ c = p; //сохраняем начало списка if (p==NULL) //если список пуст { c=h;... подробнее

Показать сообщение отдельно
Grigarosh
5 / 5 / 0
Регистрация: 03.07.2011
Сообщений: 30
09.07.2011, 20:30  [ТС]     Ошибка компиляции, класс, файлы.
Снова возникли проблемы, теперь уже в следующей задаче, той же книги (Дирк Хенкеманс, Марк Ли "Программирование игр на C++"

Неоднократно перепроверенный код:

DragonLord.cpp \\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
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>
#include "Dragon.cpp"
#include "BlueDragon.cpp"
#include "RedDragon.cpp"
#include "BlackDragon.cpp"
 
using namespace std;
 
int menuChoice();
 
int main (void)
{
    srand(time(0));
    Dragon* dragons[3];
    int hp = 15;
    int armour = 2;
    int tempArmour;
    int tempAttack;
    dragons[0] = new RedDragon(rand()%4+1);
    dragons[1] = new BlackDragon(rand()%4+1);
    dragons[2] = new BlueDragon(rand()%4+1);
    Dragon* d = dragons[rand()%3];
    cout << "Добро пожаловать, благородный рыцарь.\n"
    << "Ты должен спасти принцессу."
    << "Ее похитил "
    << d->getName() << ".\n"
    << "Ты должен победить дракона.\n";
    cout << "Твоя сила: " << hp << endl;
    while (d->isAlive() && hp>0)
    {
          int choice = menuChoice();
          if (choice == 3) goto RUN;
          else if (choice == 1)
          {
               tempAttack = rand()%16+5;
               tempArmour = armour;
          }
          else 
          {
                  tempAttack = rand()%11;
                  tempArmour = armour + 4;
                  }
                  hp -= d->attack(armour);
                  d->defend(rand()%16-5);
                  cout << "\nТы наносишь мощный удар и ущерб "
                  << tempAttack << " damage.\n";
                  cout << "Твоя сила: " << hp;
                  }
                  if (d->isAlive())
                  cout << "\nТы побежден "
                  << " могущественным драконом.\n";
                  else
                  cout <<"\n\nТы убил дракона!"
                  << " Поздравляем.\n"
                  << "Принцесса спасена.\n";
                return 0;
                RUN:
                    cout <<"\nТы струсил и убежал.\n";
                    return 0;
                }
                
                int menuChoice()
                {
                    int choice;
                    do {
                        cout << endl
                        << "[1]Атаковать\n"
                        << "[1]Оборонятся\n"
                        << "[3]Бежать\n";
                    cin >> choice;
                    } while(choice < 1 && choice >3);
                    return choice;
                    }
Dragon.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
#include <cstdlib>
#include <string>
#include <ctime>
 
#define MAX(a,b) a>b? a:b
 
using namespace std;
 
class Dragon
{
private:
        int speed;
        string name;
        int hitPoints;
        int armour;
        int treasure;
        int clawDamage;
        int size;
protected:
          Dragon(int theSize);
          int getArmour() {return armour;}
          int& getHitPoints() {return hitPoints;}
          int getClawDamage() {return clawDamage;}
          int getSize() {return size;}
          virtual int attack(int targetArmour, int specialDamage);
public:
          virtual int attack(int targetArmour) = 0;
          virtual void defend(int damage) = 0;
          int getTreasure() {return treasure;}
          virtual string getName() {return name;}
          int getSpeed() {return speed;}
          bool isAlive() {return hitPoints >0;}
};
Dragon::Dragon(int theSize):size(theSize)
{
if (size < 1 || size > 4)
size = 3;
clawDamage = 2 * size;
speed = 3 * size;
hitPoints = 4 * size;
armour - size;
treasure = 1000 * size;
srand(time(0));
}
 
int Dragon::attack(int targetArmour, int specialDamage)
{
    int useSpecial = rand() % 2;
    int damage;
    if (useSpecial)
       damage = specialDamage;
       else damage - getClawDamage();
       return MAX(damage - targetArmour,0);
}
RedDragon.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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>
#include "Dragon.cpp"
 
class RedDragon : public Dragon
{
private:
int fireDamage;
public:
       RedDragon(int theSize);
       int attack(int targetArmour);
       void defend(int damage);
       string getName() {return "Красный дракон";}
};
 
RedDragon::RedDragon(int theSize)  : Dragon(theSize)
{
fireDamage = 4*getSize();
}
 
int RedDragon::attack(int targetArmour)
{
    return Dragon::attack(targetArmour, fireDamage);
}
 
void RedDragon::defend(int damage)
{
     getHitPoints() -= (damage - getArmour())/3;
}
BlueDragon.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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>
#include "Dragon.cpp"
 
class BlueDragon : public Dragon
{
private:
int iceDamage;
public:
       BlueDragon(int theSize);
       int attack(int targetArmour);
       void defend(int damage);
       string getName() {return "Синий дракон";}
};
 
BlueDragon::BlueDragon(int theSize):
                         Dragon(theSize)
{
iceDamage = 3*getSize();
}
 
int BlueDragon::attack(int targetArmour)
{
    return Dragon::attack(targetArmour, iceDamage);
}
 
void BlueDragon::defend(int damage)
{
     getHitPoints() -= (damage - getArmour())/2;
}
BlackDragon.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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>
#include "Dragon.cpp"
 
class BlackDragon : public Dragon
{
private:
int poisonDamage;
public:
       BlackDragon(int theSize);
       int attack(int targetArmour);
       void defend(int damage);
       string getName() {return "Черный дракон";}
};
 
BlackDragon::BlackDragon(int theSize):
                         Dragon(theSize)
{
poisonDamage = getSize();
}
 
int BlackDragon::attack(int targetArmour)
{
    return Dragon::attack(targetArmour, poisonDamage);
}
 
void BlackDragon::defend(int damage)
{
     getHitPoints() -= damage - getArmour();
}

Вывод компилятора:
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
Compiler: Default compiler
Building Makefile: "D:\Dragon\Makefile.win"
Executing  make...
make.exe -f "D:\Dragon\Makefile.win" all
g++.exe -c Dragon.cpp -o Dragon.o -I"lib/gcc/mingw32/3.4.2/include"  -I"include/c++/3.4.2/backward"  -I"include/c++/3.4.2/mingw32"  -I"include/c++/3.4.2"  -I"include"   
 
g++.exe -c DragonLord.cpp -o DragonLord.o -I"lib/gcc/mingw32/3.4.2/include"  -I"include/c++/3.4.2/backward"  -I"include/c++/3.4.2/mingw32"  -I"include/c++/3.4.2"  -I"include"   
 
In file included from BlueDragon.cpp:5,
                 from DragonLord.cpp:6:
Dragon.cpp:10: error: redefinition of `class Dragon'
 
Dragon.cpp:10: error: previous definition of `class Dragon'
 
Dragon.cpp:34: error: redefinition of `Dragon::Dragon(int)'
 
Dragon.cpp:34: error: `Dragon::Dragon(int)' previously defined here
 
Dragon.cpp:47: error: redefinition of `int Dragon::attack(int, int)'
 
Dragon.cpp:47: error: `virtual int Dragon::attack(int, int)' previously defined here
 
In file included from RedDragon.cpp:5,
                 from DragonLord.cpp:7:
Dragon.cpp:10: error: redefinition of `class Dragon'
 
Dragon.cpp:10: error: previous definition of `class Dragon'
 
Dragon.cpp:34: error: redefinition of `Dragon::Dragon(int)'
Dragon.cpp:34: error: `Dragon::Dragon(int)' previously defined here
Dragon.cpp:47: error: redefinition of `int Dragon::attack(int, int)'
Dragon.cpp:47: error: `virtual int Dragon::attack(int, int)' previously defined here
 
In file included from BlackDragon.cpp:5,
                 from DragonLord.cpp:8:
Dragon.cpp:10: error: redefinition of `class Dragon'
 
Dragon.cpp:10: error: previous definition of `class Dragon'
 
Dragon.cpp:34: error: redefinition of `Dragon::Dragon(int)'
 
Dragon.cpp:34: error: `Dragon::Dragon(int)' previously defined here
 
Dragon.cpp:47: error: redefinition of `int Dragon::attack(int, int)'
 
Dragon.cpp:47: error: `virtual int Dragon::attack(int, int)' previously defined here
 
make.exe: *** [DragonLord.o] Error 1
 
Execution terminated

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