Поиск:

Ответ в темуСоздание новой темы Создание опроса
> VC++, Доступ к элементам класса 
:(
    Опции темы
BFS
Дата 6.5.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.5.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)
{

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

Заранее благодарю за ответ. 
PM MAIL   Вверх
Greeen
Дата 6.5.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: 10
Всего: 18



Цитата(BFS @  6.5.2007,  14:20 Найти цитируемый пост)
Что такого описано в классе CGraf2View, что в нём всё работает нормально?

Код

class CGraf2View
{
...
public:
    CGraf2Doc* GetDocument() const;
...
};
inline CGraf2Doc* CGraf2View::GetDocument() const
{
     return reinterpret_cast<CGraf2Doc*>(m_pDocument);
}


Это сообщение отредактировал(а) Greeen - 6.5.2007, 14:58


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
BFS
Дата 6.5.2007, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



Вопрос решён. Огромнейший респект Greeen! 

Я совершенно забыл про 
(*.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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.