• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【C/C++】关于编译错误"errorC2146:syntaxerror:missing';'beforeidentifier'xxx ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

今天帮同学解决了一个问题,之前其实也遇到过,现在总结一下。问题大概是这样的,假设有如下代码:

#include <tchar.h>

DWORD g_count = 0;

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

使用VS编译会报如下错误:

1>f:\testproj\consoletest_vs2005\test\test.cpp(3) : error C2146: syntax error : missing ';' before identifier 'g_count'
1>f:\testproj\consoletest_vs2005\test\test.cpp(3) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>f:\testproj\consoletest_vs2005\test\test.cpp(3) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

这是什么原因呢?仔细看第一个error,说是在g_count前丢失了分号,这让人很费解,g_count前怎么会需要分号呢?!再看第二个error,说是丢失了类型说明符,这也很奇怪,这里明明是把g_count定义成了DWORD类型。

那么问题到底出在哪里呢?实际上原因是:DWORD并不是C++的原生类型,它是经过重定义的。这就可以理解为什么会出现上面的错误了,原来是因为没有看到DWORD的定义!将光标点到DWORD,再按Alt+G可以看到DWORD是定义在了windef.h文件里,因此只要再#include<Windows.h>文件就可以编译通过了(这里不能直接#include<WinDef.h>,因为还涉及到其它类型的定义)。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++|作用域运算符“::”发布时间:2022-07-13
下一篇:
C#中加载dll的问题发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap