Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Извините если не правильно обьяснил, давно не разговаривал по русски, надеюсь на помощь или советы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2012, 00:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Инициализация обьекта внутри другого класса (C++):

Инициализация обьекта класса списком C++ - C++
Здравствуйте, кому не сложно расскажите в кратце как мне сделать вот такую штуку: у меня есть некий класс реализующий бинарное дерево ...

Инициализация объектов класса в конструкторе другого класса - C++
У меня есть класс Subscriber,в котором есть несколько объектов другого класса Date,мне нужно,чтобы при создании Subscriber объекты класса...

BST дерево. Инициализация класса внутри класса - C++
Здравствуйте, нужно реализовать класс дерева бинарного поиска с использованием итератора. Возник вопрос, как инициализировать через...

Инициализация массива строк внутри класса - C++
Доброго времени суток! Есть такая проблема... Дан класс, в нем есть массив строк и мне нужно в конструкторе ему задать начальное значение,...

Инициализация класса A внутри класса B - C++
заранее извиняюсь, наверняка подобное было на одной из 1000 страниц=)... есть 2 класса //собственно первый класс class matrix ...

Исключительный доступ обьекта к полям другого обьекта avr/c++ - C++
исключительный доступ обьекта к полям другого обьекта avr/c++ добрый день есть два обьекта Data & Math - Data - элемент...

9
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.06.2012, 00:23 #2
Цитата Сообщение от Destreee Посмотреть сообщение
Weapontype *weapon;
Цитата Сообщение от Destreee Посмотреть сообщение
class WeaponType
-----
0
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
16.06.2012, 00:51  [ТС] #3
писал в ручнуу, дело не в синтаксической ошибке
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
16.06.2012, 01:19 #4
Цитата Сообщение от Destreee Посмотреть сообщение
// ошибка на этой строчке
какая ошика? текст в студию, а так же скопируйте сюда код, такой как он у вас записан, телепатов на форуме нет
0
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 минут
неужели никто незнает =( ?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
16.06.2012, 14:46 #6
Destreee, А определения функций кто писать будет? У вас только объявления.

C++
1
2
3
4
Swords(void);
    virtual ~Swords(void);
 
    void Display(void);
Где реализация-то?
0
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
16.06.2012, 14:59  [ТС] #7
... никто так и не ответил на конкретный вопрос...
определения есть, они пустые. Я думаю для того чтобы уловить суть, того кода что я написал вполне достаточно..
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 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/eda95dab61b844a0a55598ddf96724f0
0
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();
выводит мессадж родительского класса =( почему не срабатывает полиморфизм ?
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.06.2012, 19:42 #10
Display сделай виртуальной
0
16.06.2012, 19:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2012, 19:42
Привет! Вот еще темы с ответами:

Обращение к переменным одного метода из другого внутри класса - C++
Доброго времени суток. Поставлена задача написать программу реализующую матрицу и поостые арифметические действия, определение детерменанта...

Использование своего объекта своего класса внутри другого - C++
Здравствуйте. Есть класс для работы с матрицами. Все работает. Теперь нужно создать другой класс, где полями будут являться переменные -...

Создать класс CheckerBoard (особенности строения класса - инициализация константных членов класса) - C++
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int xSize = 1; const int ySize = 1; class...

Инициализация членов дочернего класса членами класса родителя - C++
Есть уже созданный класс-родитель A. Как эффективно инициализировать дочерний класс B членами класса A?


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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