语法错误:缺少';'在标识符'iDlg'之前

时间:2012-07-16 10:16:27

标签: c++ windows visual-studio-2010 mfc

我正在尝试从另一个对话框[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

2 个答案:

答案 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
};

请记住初始化指向实际对话框的指针。

相关问题