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


Автор: david_yu 7.2.2016, 23:05
возможно глупы вопроса, перехожу на программирование с Delphi на C++

Есть глобально созданый объект 
В нем реализован вектор:

class App
{
    private:
        std::vector<CustomObjectConsol*> flist; 
    public:
        void addobject(CustomObjectConsol *co)
        {
            flist.push_back(co);
        }
    };
    
App *ap = new App;
    
class CustomObjectConsol
{
    public:
        CustomObjectConsol()
        {
            ap->addobject(this);
        }

};

Как это можно реализовать?

Ошибка    C2027    использование неопределенного типа "App"
Ошибка    C2227    выражение слева от "->addobject" должно указывать на тип класса, структуры или объединения либо на универсальный тип

Автор: rudolfninja 7.2.2016, 23:49
Вы когда объявляете класс, он не видит глобальных объектов.
То есть, в реализации класса нельзя ссылаться на внешние глобальные объекты.
В вашем случае надо в матод CustomObjectConsol передавать адрес App и использовать переданный параметр.

Автор: math64 8.2.2016, 08:05
Код

// app.h
// Нужно предварительное объявление класса
class CustomObjectConsol;
class App
{
    private:
        std::vector<CustomObjectConsol*> flist; 
    public:
        void addobject(CustomObjectConsol *co);
    };
 // app.cpp
#include "app.h"
App *ap = new App;
void App::addobject(CustomObjectConsol *co)
{
    flist.push_back(co);
}
// customobjectconsol.h
#include "app.h"
class CustomObjectConsol
{
    public:
        CustomObjectConsol();
};
// customobjectconsol.cpp
#include "customobjectconsol.h"
CustomObjectConsol::CustomObjectConsol()
{
    ap->addobject(this);
}


Автор: david_yu 9.2.2016, 23:09
спасибо помогло... правда сделал так app.h и app.cpp - все нормально собралось 

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