1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Доступ к элементам класса

Тема в разделе "С и С++", создана пользователем BFS, 6 май 2007.

  1. BFS

    BFS Гость

    Репутация:
    0
    Значит нужно создать класс, методы которого обращались бы к контейнерным
    типам, созданным в другом классе.

    // Graf2Doc.h : interface of the CGraf2Doc class
    //


    #pragma once
    #include "afxtempl.h"

    class CGraf2Doc : public CDocument
    {
    protected: // create from serialization only
    CGraf2Doc();
    DECLARE_DYNCREATE(CGraf2Doc)

    // Attributes
    public:
    CArray <CPoint,CPoint>mArray;
    CArray <int>mint;
    CArray <int>C1;
    CArray <int>C2;
    ....................


    ///////////////////////////////////////////
    //mrClass.cpp
    #include "StdAfx.h"
    #include "mRClass.h"
    #include "mArrow.h"
    #include "Graf2Doc.h"
    #include "Graf2View.h"
    #include <math.h>

    mRClass::mRClass(void)
    {
    }

    mRClass::~mRClass(void)
    {
    }


    mstruct mRClass::Rastr(int i, float minrast, CPoint point)
    {

    CGraf2Doc* pDoc;
    int fa1;
    fa1 = pDoc->mint.GetAt(i);

    Если так написать, то fa1 открываются все элементы CGraf2Doc, компилируется
    всё нормально, но при выполнении, пишет, что вначале pDoc инициализировать
    нужно.

    В методах класса CGraf2View она инициализируется
    CGraf2Doc* pDoc = GetDocument();

    Но в моём классе, даже если я его делаю наследником CView(от этого класса
    наследуется CGraf2View), в лучшем случае пишет ошибку, что CGraf2Doc и
    GetDocument() вообще несовместимые вещи.

    Что такого описано в классе CGraf2View, что в нём всё работает нормально?

    Или может есть какой-нибудь другой способ выхода из этой ситуации?

    P.S. пробовал создавать класснаследник CObject(в нём есть сериализация), но
    не нашёл, как добавить в него методы работы с контейнерными типами данных,
    как то: Add, GetAt(), GetCount, SetAtGrow()...

    Заранее благодарю за ответ.
     
  2. BFS

    BFS Гость

    Репутация:
    0
    Вопрос решён. Я совершенно забыл про
    (*.cpp)
    #ifdef _DEBUG
    void mRClass::AssertValid() const
    {
    CView::AssertValid();
    }

    void mRClass::Dump(CDumpContext& dc) const
    {
    CView::Dump(dc);
    }

    CGraf2Doc* mRClass::GetDocument() const // non-debug version is inline
    {
    ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraf2Doc)));
    return (CGraf2Doc*)m_pDocument;
    }
    #endif //_DEBUG

    и про
    (*.h)
    #ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
    #endif
    };

    #ifndef _DEBUG // debug version in Graf2View.cpp
    inline CGraf2Doc* mRClass::GetDocument() const
    { return reinterpret_cast<CGraf2Doc*>(m_pDocument); }
    #endif
     
Загрузка...

Поделиться этой страницей