• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы BFS
  • Дата начала
B

BFS

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

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

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

BFS

Вопрос решён. Я совершенно забыл про
(*.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
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!