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

Инициализация обьекта внутри другого класса - C++

Восстановить пароль Регистрация
 
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
16.06.2012, 00:13     Инициализация обьекта внутри другого класса #1
Всем привет. Вообщем проблема такая. Есть несколько классов

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class WeaponType { };
 
class Swords : public WeaponType { };
 
КЛАСС PLAYER
 
class Player {
 
public:
Weapontype *weapon;
 
void setWeapon() {
[B]this->weapon = new Swords();[/B] // ошибка на этой строчке
}
Я хочу чтобы оружие вибиралось через функцию именно таким способом, но пока ничего не получилось и решения ненашел. Подскажите как можно решить проблему ? С++ изучаю недели 2, чтото подсказывает мне что я делаю не правильно. Если проблема так не решается, подскажите как подругому можно ее решить.

Извините если не правильно обьяснил, давно не разговаривал по русски, надеюсь на помощь или советы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.06.2012, 00:23     Инициализация обьекта внутри другого класса #2
Цитата Сообщение от Destreee Посмотреть сообщение
Weapontype *weapon;
Цитата Сообщение от Destreee Посмотреть сообщение
class WeaponType
-----
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
16.06.2012, 00:51  [ТС]     Инициализация обьекта внутри другого класса #3
писал в ручнуу, дело не в синтаксической ошибке
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.06.2012, 01:19     Инициализация обьекта внутри другого класса #4
Цитата Сообщение от Destreee Посмотреть сообщение
// ошибка на этой строчке
какая ошика? текст в студию, а так же скопируйте сюда код, такой как он у вас записан, телепатов на форуме нет
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
16.06.2012, 13:58  [ТС]     Инициализация обьекта внутри другого класса #5
Полный вариант

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
WEAPON CLASSES
 
class WeaponType
{
public:
    WeaponType(void);
    virtual ~WeaponType(void);
 
    void Display(void);
 
protected:
float damage;
int ammo;
};
 
class Swords : public WeaponType { 
 
public:
    Swords(void);
    virtual ~Swords(void);
 
    void Display(void);
 
};
 
PLAYER
 
class Footman
{
public:
 
    Footman(void);
    Footman(int points);
    virtual ~Footman(void);
 
 
 
    void setWeapon(int) {
            switch(type) {
    case 1: this->weapon = new Swords(); break;
    case 2: break;
    default: std::cout << "Error! Wrong weapon type." << std::endl;
    }
           //this->weapon = new Swords();
 }
 
    //GETTER
    int getHP() const;
 
protected:
 
WeaponType *weapon;
 
};
ERROR:
Error 1 error LNK2019: unresolved external symbol "public: __thiscall Swords::Swords(void)" (??0Swords@@QAE@XZ) referenced in function "public: __thiscall Footman::Footman(int)" (??0Footman@@QAE@H@Z)

Error 2 error LNK1120: 1 unresolved externals D:\PROJECTS\C++\AdventureGame\Debug\AdventureGame.exe AdventureGame
Добавлено через 12 часов 12 минут
неужели никто незнает =( ?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.06.2012, 14:46     Инициализация обьекта внутри другого класса #6
Destreee, А определения функций кто писать будет? У вас только объявления.

C++
1
2
3
4
Swords(void);
    virtual ~Swords(void);
 
    void Display(void);
Где реализация-то?
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
16.06.2012, 14:59  [ТС]     Инициализация обьекта внутри другого класса #7
... никто так и не ответил на конкретный вопрос...
определения есть, они пустые. Я думаю для того чтобы уловить суть, того кода что я написал вполне достаточно..
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.06.2012, 16:27     Инициализация обьекта внутри другого класса #8
Error 1 error LNK2019: unresolved external symbol "public: __thiscall Swords::Swords(void)" (??0Swords@@QAE@XZ) referenced in function "public: __thiscall Footman::Footman(int)" (??0Footman@@QAE@H@Z)
Ошибка линковки. Компилятор указывает, что у данной функции нету определения.

Добавлено через 4 минуты
http://liveworkspace.org/code/eda95d...5598ddf96724f0
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
16.06.2012, 17:46  [ТС]     Инициализация обьекта внутри другого класса #9
Вот же глупость ))) обьявления были, оказывается я забыл сохранить готовый вариант, благо изменений было не много, дописал Forever большое спасибо =) Тему можно закрывать

Добавлено через 1 час 9 минут
но теперь вышла другая (

функция
C++
1
2
3
4
5
6
7
void setWeapon(int type) {
switch(type) {
    case 1: this->weapon = new Swords(); break;
    case 2: this->weapon = new BowAndArrows(); break;
    default: std::cout << "Error! Wrong weapon type." << std::endl;
    }
}
устанавливает тип оружия, так же у каждого наследованного класса есть перегруженная функция display которая просто выводит мессандж.

и в плеере есть дисплей след содержания

C++
1
2
3
void Player::Display() {
this->weapon->Display();
}
далее в main()

обьявляю обьект класса
C++
1
2
3
Player *pl;
pl->setWeapon(2);
pl->Display();
выводит мессадж родительского класса =( почему не срабатывает полиморфизм ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2012, 19:42     Инициализация обьекта внутри другого класса
Еще ссылки по теме:

Вернуть С-строку из обьекта класса C++
C++ обращение к переменным одного метода из другого внутри класса
BST дерево. Инициализация класса внутри класса C++

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

Или воспользуйтесь поиском по форуму:
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.06.2012, 19:42     Инициализация обьекта внутри другого класса #10
Display сделай виртуальной
Yandex
Объявления
16.06.2012, 19:42     Инициализация обьекта внутри другого класса
Ответ Создать тему
Опции темы

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