zoukankan      html  css  js  c++  java
  • 【Complier】error C2275:将此类型用作表达式非法

    ###Date: 2018.3.24

    ======================================================

    问题及原因:    

         这个错误主要是C和C++之间的编程规范有所区别造成的。

         在移植c++代码到c的时候,经常会出现一个奇怪的错误, error C2275: “XXX”: 将此类型用作表达式非法, 这个错误是由于c的编译器要求将变量的声明放在所有函数调用语句之前,而c++没有这样的要求造成的。 
    解决的办法就是把变量的声明全部放在变量的生存块的开始。 


    C2275: “size_t”: 将此类型用作表达式非法,同时还导致一堆变量未定义的bug。

    将LuaXml从lua5.1移植到5.2的时候,使用VS2010编译LuaXml_lib.dll的时候碰到了这个错误,然而使用GCC能编译成功。

    实例

    群上一人遇到问题:在正确的程序中增加KdPrint()调用以输出调试信息,如下:

    //////////////////////////////////////////////////////////
    KdPrint(("xxxxxxxDriverEntryxxxxxxx"));
    
    UNICODE_STRING  uszTest;
    NTSTATUS        ntStatus;
    //////////////////////////////////////////////////////////

    但是增加这个函数调用后,程序就编译出错:error C2275: 'UNICODE_STRING' : illegal use of this type as an expression.

    解决方案:

    百度了一下把问题解决了:

    将C代码在VC++中编译,经常会出现error C2275错误,结果是变量的定义位置不对,应该在函数块的最前面。这是一个编程习惯的问题。

    在移植c++代码到c的时候,经常会出现一个奇怪的错误:“error C2275: “xxxxx”: 将此类型用作表达式非法”

    这个错误是由于c的编译器要求将变量的申明放在一个函数块的头部,而c++没有这样的要求造成的。

    解决的办法就是把变量的声明全部放在变量的生存块的开始




    参考:https://blog.csdn.net/lqk1985/article/details/7389159


    本文为博主原创文章,未经博主允许不得转载。若允许转载,请注明来源https://www.cnblogs.com/SoaringLee/,否则保留追究法律责任的权利!另外,本人提供付费咨询服务并长期承接各类毕设以及外包项目。联系QQ:2963033731。加Q备注:CSDN外包
  • 相关阅读:
    2016——3——16 kmp 7题
    bzoj3942——2016——3——15
    bzoj1355——2016——3——15
    poj 3641 ——2016——3——15
    KMP之我见
    转自他人——————TLE之前,没有一个节点叫失败!!!
    省选必知
    bzoj1449————2016——3——14
    bzoj1070————2016——3——14
    bzoj1562[NOI2009]变换序列——2016——3——12
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532527.html
Copyright © 2011-2022 走看看