我有包含类声明的标头。
DialogExInput.h
#include "Stdafx.h"
#pragma once
#include "utils.h"
// CDialogExInput dialog
class CDialogExInput : public CDialogEx
{
DECLARE_DYNAMIC(CDialogExInput)
public:
CString timeRemainedSecStr;
CString Caption;
int TimeoutSec;
int MinDataSize;
int MaxDataSize;
CString text;
int timeRemainedSec;
void AssignParams (DialogOptions* dOp);
CDialogExInput(UINT nIDTemplate, CWnd *pParent = NULL);
afx_msg void OnTimer(UINT uTime);
virtual ~CDialogExInput();
void SetOnTop();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
};
编译器无法找到DialogOptions
,utils.h
中声明了DialogExInput.h
。 utils.h
包括Error 1 error C2061: syntax error : identifier 'DialogOptions'
。
#ifndef UTILS_H
#define UTILS_H
#include "InputDialog.h"
#include <string>
using namespace std;
#define CURRENCY_EUR 978
extern HWND AuthMsgHWND;
struct DialogOptions {
CString Caption ;
CString DefaultText;
int MaxTimeoutExpected;
int MaxChars;
int MinChars;
int ModalResult;
int inputTimeRemained;
} ;
void ErrorExit();
const wchar_t *GetWC(const char *c);
bool GetProductAndVersion(CStringA & strProductName, CStringA & strProductVersion);
void doInputDialog(DialogOptions *pDo, string & answer);
void doYesNoDialog(DialogOptions *pDo, string & answer );
wstring termToWchar (const char* value);
string getTime(string format = "%d-%m-%Y %I:%M:%S" );
#endif UTILS_H
utils.h
DialogExInput.h
那么问题出在哪里?为什么DialogOptions
看不到{{1}}
答案 0 :(得分:0)
存在循环
DialogExInput.h
#pragma once
#include "utils.h"
InputDialog.h
#include "DialogExInput.h"
utils.h
#include "InputDialog.h"
因此,如果您在其他任何地方(出错之前)包含InputDialog.h,那么将按以下顺序读取文件
Inputdialog.h DialogExInput.h utils.h
因此,和DialogExInput无法看到utils.h。
的内容如果在DialogExInput .h的开头添加struct DialogOptions
的前向声明
#include "Stdafx.h"
#pragma once
#include "utils.h"
struct DialogOptions; // forward declare as you only use a pointer/reference to it.
// CDialogExInput dialog
class CDialogExInput : public CDialogEx
制作单独的包含文件也是一种选择。
此外,您应该打破循环包含,检查您是否确实需要这些包含。如果你不这样做,它会回来再咬你。