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]: Как увидеть класс определенный в другом файле?
Здравствуйте, 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]: Как увидеть класс определенный в другом файле?
если не включено другое, то первым include в cpp должно стоять
#include"stdafx.h"
Т.е. перед всеми другими include..
Скорее всего у тебя произошло именно это..
Кроме того, ошибка может происходить при непарности скобок
ну и то что советова Odi$$ey на всякий случай сделай
Здравствуйте, vvaizh, Вы писали:
V>если не включено другое, то первым include в cpp должно стоять V>
V>#include"stdafx.h"
V>
V>Т.е. перед всеми другими include..
V>Скорее всего у тебя произошло именно это..
V>Кроме того, ошибка может происходить при непарности скобок V>ну и то что советова Odi$$ey на всякий случай сделай
Спасибо! Так оно и есть (#include "stdafx.h"). Но осталась первоначальная проблема
В файле MyClass.cpp
Если инклюдить 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]: Как увидеть класс определенный в другом файле?
Короче так можно долго с тобой возиться..
ответ один — попробуй представить, какой файл у тебя получается после препроцессора..
любой символ перед использованием должен быть объявлен..
если не понятно, нарисуй схему подключения
и в каком файле чего объявляется/используется..
(дерево должно получиться.. какой файл какме подключает, корень —
твой cpp файл в котором ошибка происходит..)
и вообще, подозрительно выглядит строчка
Здравствуйте, 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]: Как увидеть класс определенный в другом файле?
Здравствуйте, 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]: Как увидеть класс определенный в другом файле?
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, и покажи ошибку там!
Здравствуйте, 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).