我正在尝试从另一个对话框[baseline]启动一个对话框[import]。 我包含所需的“.h”文件但是我根本无法创建导入类的实例。我得到的错误是:
Error 1 error C2146: syntax error : missing ';' before identifier 'iDlg' h:\shaunak\projects\sar_ccd\sar_ccd\baseline.h 202 1 Sar_CCD
导致此[baseline.h]的代码行:
#include "Markup.h"
#include<stdio.h>
#include<math.h>
#include "baseline_func.h"
#include "resource.h"
#include "Functions.h"
#include <stdlib.h>
#include "Sar_CCDDoc.h"
#include "Sar_CCDView.h"
#include <vector>
#include "MemAlloc.h"
#include "ReadFiles.h"
#include<vector>
#include<map>
#include "afxwin.h"
#include "import.h"
#include "Geocode.h"
**<SNIP: Taking out the irrelevant lines>**
afx_msg void OnDestroy();
virtual void PostNcDestroy();
afx_msg void OnBnClickedNxtBase();
CButton nextBaseline;
import iDlg; //doesnt work!
CGeocoding cx; //works!!!
};
但是,如果我使用相同的sysntax创建另一个类[Geocoding]的实例,那么它可以正常工作:
#include "Geocoding.h"
CGeocoding cx;
请帮我弄清楚原因。
完整代码:
baseline.h:http://freetexthost.com/on06wref6c import.h:http://freetexthost.com/x4e4dkwrve
答案 0 :(得分:1)
在Visual Studio中,有一个关键字import或#import,用于导入COM DLL,也用于其他内容。我猜你在那里遇到名字碰撞。
为了解决这个问题,请将您的类导入放在namespace
import.h
namespace myimport
{
class import : public CDialog {
...
};
};
import.cpp
namespace myimport
{
...
};
然后当你使用它
myimport::import iDlg;
应该解决这个问题,虽然将其重命名为“导入”之外的其他东西将是更好的方法。
答案 1 :(得分:0)
import
不是C ++中的关键字或类型。因此,您会收到语法错误,因为编译器无法识别import
。
要创建另一个类的实例,您必须正确声明它,例如:
class baseline : public CDialog
{
// ...
CDialog *iDlg; // Pointer to imported dialog
};
请记住初始化指向实际对话框的指针。