语法错误:缺少 ';'在标识符“iDlg”之前
Posted
技术标签:
【中文标题】语法错误:缺少 \';\'在标识符“iDlg”之前【英文标题】:syntax error : missing ';' before identifier 'iDlg'语法错误:缺少 ';'在标识符“iDlg”之前 【发布时间】:2012-07-16 10:16:26 【问题描述】:我试图让一个对话框 [import] 从另一个对话框 [baseline] 启动。 我包含了所需的“.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
【问题讨论】:
import iDlg;
实际上是什么? import 是你的一个类吗?
import
是您创建的吗?或者它是否记录在某处? (除非您告诉我们,否则我们不知道这段代码应该做什么。)
顺便说一句,` import.h
(或Import.h
,因为您的平台不区分大小写)的文件可能会被包含,而不是您期望的文件。另一种可能性是您稍后包含的某些标题有一个 #define import __declspec(dllimport)
这会破坏事情。
@eternalDreamer,这很奇怪,根据您提供的代码,它应该工作
【参考方案1】:
在 Visual Studio 中,有一个关键字 import 或 #import 用于导入 COM DLL,也用于其他事情。我猜你在那里遇到了名称冲突。
为了解决这个问题,请将您的类导入放在 namespace
import.h
namespace myimport
class import : public CDialog
...
;
;
import.cpp
namespace myimport
...
;
那么当你使用它时
myimport::import iDlg;
这应该可以解决问题,尽管将其重命名为“import”以外的其他名称会是更好的方法。
【讨论】:
有什么简单的方法重构类吗? 我花了一些时间下载工具来重命名它,但无济于事。 :( 它仍然不起作用。并且命名空间会变得混乱,因为整个项目都在使用这个类。我稍后会关注这个。【参考方案2】:import
不是 C++ 中的关键字或类型。因此,您会收到语法错误,因为编译器无法识别 import
。
要创建另一个类的实例,您必须正确声明它,例如:
class baseline : public CDialog
// ...
CDialog *iDlg; // Pointer to imported dialog
;
记得初始化指向实际对话框的指针。
【讨论】:
这个怎么样:struct import...; import iDlg;
?
我不打算使用“import”作为关键字。 “import”是继承自CDialog的类的名称,就像“CGeocoding”一样。 如果我不够清楚,我真的很抱歉
但无论如何命名一个类 import
是个坏主意
@andrew - 在我之前从事这个项目的女孩。而且我无论如何都找不到“重构”它(就像在 C# 中一样)以上是关于语法错误:缺少 ';'在标识符“iDlg”之前的主要内容,如果未能解决你的问题,请参考以下文章
错误:C2146:语法错误:缺少“;”在标识符“m_Employer”之前,
错误 C2146:语法错误:缺少“;”在标识符“ContextRecord”之前
错误 C2146:语法错误:缺少“;”在标识符 'm_ball' C++、MFC 之前
vs2008编译错误:error C2146: 语法错误 : 缺少“;”(在标识符“name”的前面)