@Free_ze
Пишу комментарии в комментарии, а не в ответы

Как решить проблему работы с классом диалога в MFC проекте?

MSVS 2010. Есть диалоговое приложение на базе MFC. Есть некоторый класс-контроллер, в котором хочу хранить указатель на объект диалога для последующего взаимодействия. Но при попытке приинклуживания заголовочного файла диалога ( Project_nameDlg.h ) к контроллеру, компилятор начинает ругаться на всякую ерунду (что не определена define-константа IDD_PROJECT_NAME_DIALOG - идентификатор диалога в resource.h, а там ругается на то, что ожидается ";" перед константами).
Наглядно: пусть есть класс диалога CProject_nameDlg и другой класс Test, с указателем на первый.

/* Project_nameDlg.h */
#pragma once
#include "afxwin.h"

class CProject_nameDlg : public CDialog {
public:
	CProject_nameDlg(CWnd* pParent = NULL);	// standard constructor
	enum { IDD = IDD_PROJECT_NAME_DIALOG };
.......
};


/* Test.h */
#include "Project_nameDlg.h"

stuct Test {
	CProject_nameDlg* ptr_;

	Test(CProject_nameDlg* ptr)  :  ptr_( ptr ) { }
 };


Подозреваю, что это как-то связано с ресурсами и внутренней какой-то кодогенерации, которая сбивается при втором инклуде злосчастного класса диалога. Вынуждает делать "интеллектуальный интерфейс" вместо MVC. Но не должно же быть все так топорно, может есть какой-то workaround?
  • Вопрос задан
  • 2949 просмотров
Решения вопроса 1
@Free_ze Автор вопроса
Пишу комментарии в комментарии, а не в ответы
Проблему решил жестким принудительным инклудом resource.h в заголовочный файл диалога ( Project_nameDlg.h ). Т.к. там константы-дефайны, то коллизии не будет (переопределяться), но я буду уверен, что не словлю
undeclared identifier IDD_PROJECT_NAME_DIALOG


Еще нашел:
stackoverflow.com/questions/20651931/how-to-access...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@digitallez
Вероятно что-то не так с порядком инклудов (возможно даже в том месте где написано #include "Test.h").
Попробуйте добавить в начале Test.h :
#pragma once
#include "afxwin.h"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы