Как увидеть класс определенный в другом файле?
От: Number0  
Дата: 07.04.03 11:14
Оценка:
//файл MyView.h

class CMyView: public CView
{
...
};



//файл my.h

CMyView *pView = (CMyView *) pChild->GetActiveView();



естественно получаю ошибку 'CMyView' : undeclared identifier
если в my.h сделать #include "MyView.h", то получаю
d:\...\..\myview.h(23) : error C2143: syntax error : missing ';' before '*'
d:\...\..\myview.h(23) : error C2501: 'CMyDoc' : missing storage-class or type specifiers
d:\...\..\myview.h(23) : error C2501: 'GetDocument' : missing storage-class or type specifiers
MyView.cpp

содержимое 23-ей строки:
CDBaseDoc* GetDocument();

Так как сделать класс CMyView видимым в my.h?
Re: Как увидеть класс определенный в другом файле?
От: vvaizh http://izh-test.sourceforge.net/
Дата: 07.04.03 11:21
Оценка:
Здравствуйте, Number0, Вы писали:

N>//файл MyView.h


N>
N>class CMyView: public CView
N>{
N>...
N>};
N>


N>

N>//файл my.h

N>
N>CMyView *pView = (CMyView *) pChild->GetActiveView();
N>


N>

N>естественно получаю ошибку 'CMyView' : undeclared identifier
N>если в my.h сделать #include "MyView.h", то получаю
N>d:\...\..\myview.h(23) : error C2143: syntax error : missing ';' before '*'
N>d:\...\..\myview.h(23) : error C2501: 'CMyDoc' : missing storage-class or type specifiers
N>d:\...\..\myview.h(23) : error C2501: 'GetDocument' : missing storage-class or type specifiers
N>MyView.cpp

N>содержимое 23-ей строки:

N> CDBaseDoc* GetDocument();

N>Так как сделать класс CMyView видимым в my.h?


перенеси

CMyView *pView = (CMyView *) pChild->GetActiveView();


в сpp файл, или на худой конец напиши

class CMyView *pView = (class CMyView *) pChild->GetActiveView();


тогда правда падать будет в другом месте (там где к полю попробуешь обратиться)
http://izh-test.sourceforge.net/russian/introduction.html
Re: Как увидеть класс определенный в другом файле?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 07.04.03 11:36
Оценка:
Здравствуйте, Number0, Вы писали:

N>//файл MyView.h


N>//файл my.h


N>если в my.h сделать #include "MyView.h", то получаю


содержимое файлов MyView.h и my.h заключено во что-то типа

#ifndef __MYVIEW_H__
#define __MYVIEW_H__


//... содержимое...

#endif
Re[2]: Как увидеть класс определенный в другом файле?
От: vvaizh http://izh-test.sourceforge.net/
Дата: 07.04.03 11:39
Оценка:
Тоже конечно верно, но всё равно, определение
нужного класса он так и не увидит..
http://izh-test.sourceforge.net/russian/introduction.html
Re[3]: Как увидеть класс определенный в другом файле?
От: Number0  
Дата: 07.04.03 12:17
Оценка:
Здравствуйте, vvaizh, Вы писали:


V>Тоже конечно верно, но всё равно, определение

V>нужного класса он так и не увидит..

Значит так:
— MyClass.h содержит описания моих классов
— MyClass.cpp содержит реализацию функций членов классов MyClass.h
— MyView.h класс представления
— MyView.cpp реализацию
В MyClass.cpp необходимо увидеть класс представления MyView.h;

В WorkSpace->FileView пректа файл MyClass.h лежит в External Dependencies; MyClass.cpp и MyView.cpp в Source Files;
MyView.h в Header Files.

// MyClass.cpp
#include "MyClass.h"
...
myclass::myclass()
{
}
...
при компиляции получаю
d:\...\...\myclass.cpp(67) : fatal error C1010: unexpected end of file while looking for precompiled header directive
...
BSCMAKE: error BK1506 : cannot open file '.\Debug\MyClass.sbr': No such file or directory

что бы это могло значить?
Re[4]: Как увидеть класс определенный в другом файле?
От: gem Россия  
Дата: 07.04.03 12:23
Оценка:
Здравствуйте, Number0, Вы писали:

N>Здравствуйте, vvaizh, Вы писали:


N>

V>>Тоже конечно верно, но всё равно, определение
V>>нужного класса он так и не увидит..

N>Значит так:

N> — MyClass.h содержит описания моих классов
N> — MyClass.cpp содержит реализацию функций членов классов MyClass.h
N> — MyView.h класс представления
N> — MyView.cpp реализацию
N>В MyClass.cpp необходимо увидеть класс представления MyView.h;

N>В WorkSpace->FileView пректа файл MyClass.h лежит в External Dependencies; MyClass.cpp и MyView.cpp в Source Files;

N>MyView.h в Header Files.

N>// MyClass.cpp

N>#include "MyClass.h"
N>...
N>myclass::myclass()
N>{
N>}
N>...
N>при компиляции получаю
N>d:\...\...\myclass.cpp(67) : fatal error C1010: unexpected end of file while looking for precompiled header directive
N>...
N>BSCMAKE: error BK1506 : cannot open file '.\Debug\MyClass.sbr': No such file or directory

N>что бы это могло значить?


N>


N>


попробуй сделать Rebuild All
удачи )
Re[4]: Как увидеть класс определенный в другом файле?
От: vvaizh http://izh-test.sourceforge.net/
Дата: 07.04.03 12:25
Оценка: 2 (1)
если не включено другое, то первым include в cpp должно стоять
#include "stdafx.h"

Т.е. перед всеми другими include..

Скорее всего у тебя произошло именно это..
Кроме того, ошибка может происходить при непарности скобок
ну и то что советова Odi$$ey на всякий случай сделай
http://izh-test.sourceforge.net/russian/introduction.html
Re[5]: Как увидеть класс определенный в другом файле?
От: Number0  
Дата: 07.04.03 12:37
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>если не включено другое, то первым include в cpp должно стоять

V>
V>#include "stdafx.h"
V>

V>Т.е. перед всеми другими include..

V>Скорее всего у тебя произошло именно это..


V>Кроме того, ошибка может происходить при непарности скобок

V>ну и то что советова Odi$$ey на всякий случай сделай

Спасибо! Так оно и есть (#include "stdafx.h"). Но осталась первоначальная проблема
В файле MyClass.cpp


#include MyClass.cpp
...
BOOL MyClass::Func()
{
    CMDIFrameWnd *pFrame =  (CMDIFrameWnd*)AfxGetApp()->m_pMainWnd;
    CMDIChildWnd *pChild = (CMDIChildWnd *) pFrame->GetActiveFrame();
    CMyView *pView = (CMyView *) pChild->GetActiveView();
    pView->m_fList;
    CWnd *pView = theApp.m_pMainWnd->GetActiveView();
        ...
    return TRUE;
}


Если инклюдить CMyView.h в котором CMyView, то
d:\...\..\myview.h(23) : error C2143: syntax error : missing ';' before '*'
d:\...\..\myview.h(23) : error C2501: 'CMyDoc' : missing storage-class or type specifiers
d:\...\..\myview.h(23) : error C2501: 'GetDocument' : missing storage-class or type specifiers
MyView.cpp

содержимое 23-ей строки:
CMyDoc* GetDocument();
Если не инклюдить, то
'CMyView' : undeclared identifier
Так как же все таки?
Re[6]: Как увидеть класс определенный в другом файле?
От: vvaizh http://izh-test.sourceforge.net/
Дата: 07.04.03 12:44
Оценка:
Короче так можно долго с тобой возиться..
ответ один — попробуй представить, какой файл у тебя получается после препроцессора..
любой символ перед использованием должен быть объявлен..
если не понятно, нарисуй схему подключения
и в каком файле чего объявляется/используется..
(дерево должно получиться.. какой файл какме подключает, корень —
твой cpp файл в котором ошибка происходит..)
и вообще, подозрительно выглядит строчка

#include MyClass.cpp

Это что, описка? такого быть не должно!
http://izh-test.sourceforge.net/russian/introduction.html
Re[7]: Как увидеть класс определенный в другом файле?
От: Number0  
Дата: 07.04.03 13:04
Оценка:
Здравствуйте, vvaizh, Вы писали:

V>Короче так можно долго с тобой возиться..

V>ответ один — попробуй представить, какой файл у тебя получается после препроцессора..
V>любой символ перед использованием должен быть объявлен..
V>если не понятно, нарисуй схему подключения
V>и в каком файле чего объявляется/используется..
V>(дерево должно получиться.. какой файл какме подключает, корень —
V>твой cpp файл в котором ошибка происходит..)
V>и вообще, подозрительно выглядит строчка

V>#include MyClass.cpp

V>
V>Это что, описка? такого быть не должно!
Да это описка!

Что я полное ламо это я понял! Последний вопрос!

Генерим с помощью AppWizard'а MDI Application с названием My. Полечаем кучу Source и Header файлов.
Так как в файле MyDoc.cpp(или в любом другом, кроме MyView.cpp) создать указатель на CMyView. Если в этот файл инклюдить MyView.h то ошибки, если нет, то undeclared identifier? Или мне пора диагноз ставить?
Re[8]: Как увидеть класс определенный в другом файле?
От: gem Россия  
Дата: 07.04.03 13:14
Оценка:
Здравствуйте, Number0, Вы писали:

N>Здравствуйте, vvaizh, Вы писали:


V>>Короче так можно долго с тобой возиться..

V>>ответ один — попробуй представить, какой файл у тебя получается после препроцессора..
V>>любой символ перед использованием должен быть объявлен..
V>>если не понятно, нарисуй схему подключения
V>>и в каком файле чего объявляется/используется..
V>>(дерево должно получиться.. какой файл какме подключает, корень —
V>>твой cpp файл в котором ошибка происходит..)
V>>и вообще, подозрительно выглядит строчка

V>>#include MyClass.cpp

V>>
V>>Это что, описка? такого быть не должно!
N>Да это описка!

N>Что я полное ламо это я понял! Последний вопрос!


N>Генерим с помощью AppWizard'а MDI Application с названием My. Полечаем кучу Source и Header файлов.

N>Так как в файле MyDoc.cpp(или в любом другом, кроме MyView.cpp) создать указатель на CMyView. Если в этот файл инклюдить MyView.h то ошибки, если нет, то undeclared identifier? Или мне пора диагноз ставить?

ради эксперимента сделал проект My
откомпилировал его... ошибок нету )
в MyDoc.cpp вставил строчку #include "MyView.h"
и нписал следующее....

CMyDoc::CMyDoc()
{
    CMyView* pv = NULL;
}


и получил следующее....

Compiling...
myDoc.cpp
Linking...

my.exe — 0 error(s), 0 warning(s)

в чем проблема?
Re[8]: Как увидеть класс определенный в другом файле?
От: vvaizh http://izh-test.sourceforge.net/
Дата: 07.04.03 13:29
Оценка:
N>Генерим с помощью AppWizard'а MDI Application с названием My. Полечаем кучу Source и Header файлов.
N>Так как в файле MyDoc.cpp(или в любом другом, кроме MyView.cpp) создать указатель на CMyView. Если в этот файл инклюдить MyView.h то ошибки, если нет, то undeclared identifier? Или мне пора диагноз ставить?

1. если уже нарисовал, и что то ещ не понятно, то пришли схему
2. ошибка, которую ты нам устойчиво цитируешь, показывает, что ошибка происходит в *.h файле!
если у тебя написано просто
YourView *func();
(без тела), а тело в cpp
то напиши просто
class YourView *func();
если же у тебя есть тело, в котором какие то операции с этим указателем
(разыменование, или приведение типов) и ри этом ты в классе-предке пытаещься
юзать класс-потомок, то такая схема (когда у тебя тело в *.h) при простом порядке include-оа работать не будет!!!!!
выноси в *.cpp, и покажи ошибку там!
http://izh-test.sourceforge.net/russian/introduction.html
Re[6]: Как увидеть класс определенный в другом файле?
От: Игорь Вартанов Ниоткуда  
Дата: 08.04.03 14:22
Оценка:
Здравствуйте, Number0, Вы писали:

N>Если инклюдить CMyView.h в котором CMyView, то

N>d:\...\..\myview.h(23) : error C2143: syntax error : missing ';' before '*'
N>d:\...\..\myview.h(23) : error C2501: 'CMyDoc' : missing storage-class or type specifiers
N>d:\...\..\myview.h(23) : error C2501: 'GetDocument' : missing storage-class or type specifiers
N>MyView.cpp

N>содержимое 23-ей строки:

N>CMyDoc* GetDocument();
N>Если не инклюдить, то
N>'CMyView' : undeclared identifier
N>Так как же все таки?

Судя по всему, при включении MyView.h теряется информация о классе CMyDoc. Если упоминание о нем содержится только в 23-й строке MyView.h (либо где-то еще, но исключительно в форме указателя, без необходимости знать подробности реализации CMyDoc, как то: размер, методы, данные), то обычно помогает упреждающее объявление класса:

class CMyDoc;  // оно самое :)
#include "MyView.h"
. . . // the rest of bla-bla-bla...

Практически то же самое можно сделать и в My.h в отношении CMyView, при соблюдении вышеназванных условий (и тогда отпадает необходимость включать MyView.h).

Пробуй.
---
С уважением,
Игорь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.