Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

14K
06 мая 2007 года
BFS
34 / / 11.04.2007
Значит нужно создать класс, методы которого обращались бы к контейнерным типам, созданным в другом классе.

// 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)
{
//функция находит координаты точки фигуры, под номером i (в массиве mArray), ближайшей
//к точке с координатами point
//minrast - минимальное, установленное на данный момент, расстояние до фигуры

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()...

Заранее благодарю за ответ.
4.5K
06 мая 2007 года
e-XperT
127 / / 04.07.2006
 
Код:
CWinApp      *MyApp = AfxGetApp();
POSITION      pos   = MyApp->GetFirstDocTemplatePosition();
CDocTemplate *Templ = MyApp->GetNextDocTemplate(pos);
                       pos   = Templ->GetFirstDocPosition();
CGRaf2Doc *DocData  = (CGRaf2Doc *)Templ->GetNextDoc(pos);
14K
06 мая 2007 года
BFS
34 / / 11.04.2007
Вопрос решён. Я совершенно забыл про
(*.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
14K
06 мая 2007 года
BFS
34 / / 11.04.2007
Отдельное спасибо Эксперту!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог