Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Инициализировать класс внутри другого класса


Автор: kurtis 29.11.2009, 18:56
Здравствуйте!
Есть следующий код:
Код

#include    <iostream>
using namespace std;

class Insider
{
    public:
        Insider(unsigned int & _value)          // constructor
        :
        my_value (_value)
        {;};
        unsigned int get_my_value() {
            ++my_value;
            return my_value;
        }
    private:
        unsigned int & my_value;
}; // -----  end of class Insider  -----

class Global
{
    public:
        Global (unsigned int & _value)          // constructor
        :
        some_value (_value)
        {;};
        void driver() {
            some_value = my_insider1.get_my_value() + \
                                        my_insider2.get_my_value();
        }
        void print_value() { 
            cout << some_value << endl; 
        }
    private:
        unsigned int & some_value;
        Insider my_insider1;
        Insider my_insider2;
}; // -----  end of class GLobal  -----

unsigned int some_global_value = 190;

Global my_global(some_global_value);

int main()
{
    cout << "This is some foo!\n" << endl;

    my_global.driver();
    my_global.print_value();

    return 0;
}

В состав классе Global входят 2 дополнительных класса, которые заведуют какими-то данными, и у них есть одна переменная, которая передается по ссылке (my_value).
Как правильно объявить класс Global, так чтоб оба внутренних класса инициализировались нужными значениями? Вариант с созданием отдельно классов my_insider1 и my_insider2 (внешними относительно Global) с дальнейшей передачей их по ссылке, не подходит!

Спасибо за внимание! smile 

P.S. Приведенный фрагмент кода, компилируется со следующими ошибками:
Код

mike@myHome:/tmp$ colorgcc test.cpp 
test.cpp: In constructor ‘Global::Global(unsigned int&)’:
test.cpp:41: error: no matching function for call to ‘Insider::Insider()’
test.cpp:24: note: candidates are: Insider::Insider(unsigned int&)
test.cpp:22: note:                 Insider::Insider(const Insider&)
test.cpp:41: error: no matching function for call to ‘Insider::Insider()’
test.cpp:24: note: candidates are: Insider::Insider(unsigned int&)
test.cpp:22: note:                 Insider::Insider(const Insider&)


Автор: mes 29.11.2009, 19:15
Код

   Global (unsigned int & _value)          // constructor
        :
        some_value (_value),
        my_insider1 (_value),
        my_insider2 (_value){}


P.S. Вы путаете, что есть объект, а что класс..

Автор: kurtis 29.11.2009, 19:45
Спасибо, то что нужно!

Автор: Destreee 16.6.2012, 13:52
Всем привет. Вообщем проблема такая. Есть несколько классов

Код

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 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


Я хочу чтобы оружие вибиралось через функцию именно таким способом, но пока ничего не получилось и решения ненашел. Подскажите как можно решить проблему ? С++ изучаю недели 2, чтото подсказывает мне что я делаю не правильно. Если проблема так не решается, подскажите как подругому можно ее решить.

 Извините если не правильно обьяснил, давно не разговаривал по русски, надеюсь на помощь или советы

Автор: borisbn 16.6.2012, 14:07
Цитата(Destreee @  16.6.2012,  13:52 Найти цитируемый пост)
чтото подсказывает мне что я делаю не правильно

Это точно. А именно - задаёшь свой вопрос в чужой теме. Да ещё и вопрос никак не связанный с темой

Автор: Destreee 16.6.2012, 16:47
я создал тему , а ее почемуто обьеденило вместе с этой....

Автор: borisbn 17.6.2012, 16:18
Цитата(Destreee @  16.6.2012,  16:47 Найти цитируемый пост)
я создал тему , а ее почемуто обьеденило вместе с этой.... 

user posted image
уверен, что нажал 2, а не 1 ?  smile 

Цитата(Destreee @  16.6.2012,  13:52 Найти цитируемый пост)
Swords(void);

Это - описание функции, а где определение ? Должно быть в cpp-шнике. Если есть, то включен ли cpp-ник в проект ?
Цитата(Destreee @  16.6.2012,  13:52 Найти цитируемый пост)
void setWeapon(int) {
            switch(type) {

откуда взялся type ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)