Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Ошибка при #include


Автор: CityAC 20.4.2007, 08:37
SDI приложение dz29
Есть в нем свой класс CMyEllipse
Код



#pragma once
class Cdz29View;
// CEllipse command target


class CMyEllipse : public CObject
{
    .................
}



В классах Cdz29View и Cdz29Doc приложения он подключен #include "ellipse.h"

Проблема в том, что когда мне нужен указатель на Cdz29View в моем классе CMyEllipse,я получаю его так
Код

CMyEllipse::CMyEllipse(CPoint pt, int radius):m_Point(pt),
                    m_rad(radius)                
{
         //Cdz29View* m_pView - объявлен в классе
    m_pView = (Cdz29View*)AfxGetMainWnd();
}



все компилится и m_pView получает верное значения
но когда  я его пытаюсь использовать, например в этой функции
Код

void CMyEllipse::DrawEllipse(CPoint point, int radius)
{
    
    CDC*   pDC = GetDC(m_pView->m_hWnd);
         .............
}




компилятор выдает 

error C2027: use of undefined type 'Cdz29View'
       see declaration of 'Cdz29View'

если  подключить в моем классе #include "dz 29View.h"

Код


#pragma once
//class Cdz29View;
#include "dz 29View.h"

// CEllipse command target


class CMyEllipse : public CObject
{
    .................
}


то вылезает куча ошибок, я так понимаю из-за перекресного подключения

Как решить проблему?

Автор: Rodman 20.4.2007, 08:52
Цитата(CityAC @  20.4.2007,  07:37 Найти цитируемый пост)
"dz 29View.h"

а что за пробелы???

а путь правильный?

Автор: CityAC 20.4.2007, 09:05
путь правильный
все остальное с пробелами компилится

Автор: Earnest 20.4.2007, 20:16
Цитата(CityAC @  20.4.2007,  09:37 Найти цитируемый пост)
то вылезает куча ошибок, я так понимаю из-за перекресного подключения
Как решить проблему? 

Не подключать перекрестно, естественно.

У тебя ведь cpp не компилируется? Вот туда и включай, зачем в хедер-то.
А в хедере, если нужно, добавь forward declaration.

Автор: Любитель 23.4.2007, 12:24
Цитата(CityAC @  20.4.2007,  08:37 Найти цитируемый пост)
В классах Cdz29View и Cdz29Doc приложения он подключен #include "ellipse.h"

CityAC, в плюсах есть две разные вещи - инклюд при объявлении и инклюд при реализации (я понимаю, что формально всё это один препроцессор, но традиционный подход, позволяет немного исказить действительность ради понятности). В cpp похоже ты инклюды не любишь ставить smile

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