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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
#1

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

16.06.2012, 00:13. Просмотров 849. Ответов 9
Метки нет (Все метки)

Всем привет. Вообщем проблема такая. Есть несколько классов

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, чтото подсказывает мне что я делаю не правильно. Если проблема так не решается, подскажите как подругому можно ее решить.

Извините если не правильно обьяснил, давно не разговаривал по русски, надеюсь на помощь или советы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2012, 00:13     Инициализация обьекта внутри другого класса
Посмотрите здесь:
Инициализация обьекта класса списком C++ C++
BST дерево. Инициализация класса внутри класса C++
Инициализация массива строк внутри класса C++
Инициализация класса A внутри класса B C++
C++ Исключительный доступ обьекта к полям другого обьекта avr/c++
C++ Обращение к переменным одного метода из другого внутри класса
Использование своего объекта своего класса внутри другого C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 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
Каратель
Эксперт С++
6553 / 3973 / 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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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++
Инициализация массива внутри case C++
Запись в файл данных из обьекта класса C++
возврат копии обьекта класса из метода C++

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru