zoukankan      html  css  js  c++  java
  • 【C/C++】关于编译错误 "error C2146: syntax error : missing ';' before identifier 'xxx'"

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

    #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>,因为还涉及到其它类型的定义)。

  • 相关阅读:
    NFS原理
    linux NFS配置案例
    centos swap分区
    git常用命令
    MHA介绍和基础、原理、架构、工具介绍
    mysql5.7.26部署MHA
    mysql5.7.26 基于GTID的主从复制环境搭建
    MHA监控进程异常退出(MHA版本:0.56)
    mysql 主从 Last_IO_Errno错误代码说明
    mysql 在gtid环境下缺少一部分binlog部署从库
  • 原文地址:https://www.cnblogs.com/jeJee/p/2693692.html
Copyright © 2011-2022 走看看