error c2275 system::drawing::pens 将此类型用作正则表达式 非法字符非法

3338人阅读
C/C++(31)
error C2275: &XXX&: 将此类型用作表达式非法天天向上
在移植c++代码到c的时候,经常会出现一个奇怪的错误, error C2275: &XXX&: 将此类型用作表达式非法,
这个错误是由于c的编译器要求将变量的声明放在所有函数调用语句之前,而c++没有这样的要求造成的。
解决的办法就是把变量的声明全部放在变量的生存块的开始。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:855184次
积分:10118
积分:10118
排名:第936名
原创:222篇
转载:44篇
评论:129条
(1)(1)(2)(1)(1)(5)(1)(1)(4)(2)(4)(1)(4)(6)(9)(3)(7)(4)(6)(24)(14)(9)(2)(1)(6)(6)(1)(44)(22)(1)(14)(6)(5)(14)(12)(6)(4)(1)(11)VC各种链接错的解决办法(一)
】 浏览:331次
  解决办法:  1.nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv  nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc  nafxcw.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctype  nafxcw.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype  nafxcw.lib(dcprev.obj) : error LNK2001: unresolved external symbol __mbctype  nafxcw.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype  ..\..\Output\Release/FirewallMan.exe : fatal error LNK1120: 3 unresolved externals  Error executing link.exe.  解决办法:  PROJECT-&SETING-&C/()-&PREPROCESSOR-&定义 _AFXDLL,完毕。  2.LINK : warning LNK4098: defaultlib "MSVCRT" conflicts wi use /NODEFAULTLIB:library  解决办法:  PROJECT-&SETING-&LINK-&INPUT-&IGNORE LIB...-&MSVCRT.LIB  3. 如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds  就这样改:  C/()-&Code Generation-&Multithread DLL  “Linking...  nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex  nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex  libcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main”  VC++()默认的工程设置是单线程的,而你使用了多线程,所以要修改设置。选择菜单“Project|settings”,选择C/C++()标签,在CODE GENERATION分类中选择除SINGLE-THREADED的其他选择。  其他:  1. 解决error LNK2005: ___crtExitProcess 已经在 LIBCMTD.lib(crt0dat.obj) 中定义  有的r候, 在 Debug 模式下g]}, Q到 Release 模式就l生一堆}.  典型的例子, 就是因 c++ runtime library O定不同, 所造成的重}定xBYe`.  而另一常的例子是 0概c library 使用不同的字元集合O定  (如: 一用 Unicode Character Set, 另一用 Multi-Byte Character Set)  @e`  l生原因, 有可能是  1. 你 link 的 lib 使用 C++() Multi-threaded DLL (/MD)  2. 而你的 source 使用的 C++() runtime library 是 Multi-threaded (/MT)  е轮匮}定x  解Q方法:  使用相同的 C++() runtime library.  例如都使用 static 的 Multi-threaded (/MT).  2. 错误 1 error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" () 已经在 LIBCMT.lib(typinfo.obj) 中定义 MSVCRTD.lib  项目 -& 属性 -& c/C++()& -& 代码生成& -& 运行时库& 设置为: 多线程调试 DLL (/MDd)  被引用的库和调用的程序编译选项不同,需要改成一致后编译  3. #pragma once与 #ifndef的区别  为了避免同一个文件被include多次  1&& #ifndef方式  2&& #pragma once方式  在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。  方式一:  #ifndef __SOMEFILE_H__  #define __SOMEFILE_H__  ... ... // 一些声明语句  #endif  方式二:  #pragma once  ... ... // 一些声明语句  #ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况  #pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。  方式一由语言支持所以移植性好,方式二 可以避免名字冲突  4. error LNK2019: 无法解析的外部符号 __imp__PathCombineW  PathCombine是Shell api需要引入库  #pragma comment( lib, "shlwapi.lib")  5.& error C2662: "MyClass::GetName()”: 不能将“this”指针从“const MyClass”转换为“MyClass &”  bool MyClass::operator==(const MyClass* n1) const  {  return GetName() == n1-&GetName();  }  原因是不能在const函数中调用对象的非const方法,MyClass中的GetName()必须是const的。  6. template 模板  搞死了  模板声明和定义必须在同一个文件中,而且只有实例话模板类型时才编译模板实例  7. error C2275: “MyClass”: 将此类型用作表达式非法 MyClass.Instance();  原因:Instance是静态方法,用.引用会出错。应该是MyClass::Instance()  8. error LNK2019: 无法解析的外部符号 "public: __thiscall MyClass(void)  原因:只声明了构造函数,MyClass(); ,但未定义。 可以定义空函数,或者直接注释掉,使用默认构造函数。  9.& error C2504: “testing”: 未定义基类  class PackToolTest : testing.Test {}  原因:Test是testing命名空间下的一个类,需要用域操作符,testing::Test  还有一个问题,缺少基类继承权限(public、protected、private) &&
【】【】【】
【】【】【】 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
常见编译错误信息
下载积分:1000
内容提示:常见编译错误信息
文档格式:DOC|
浏览次数:86|
上传日期: 16:34:12|
文档星级:
该用户还上传了这些文档
常见编译错误信息
官方公共微信下次自动登录
现在的位置:
& 综合 & 正文
error C2275
将此类型用作表达式非法
C2275: “size_t”: 将此类型用作表达式非法,同时还导致一堆变量未定义的bug。
将LuaXml从lua5.1移植到5.2的时候,使用VS2010编译LuaXml_lib.dll的时候碰到了这个错误,然而使用GCC能编译成功。
群上一人遇到问题:在正确的中增加KdPrint()调用以输出调试信息,如下:
//////////////////////////////////////////////////////////
KdPrint(("xxxxxxxDriverEntryxxxxxxx"));
UNICODE_STRING
//////////////////////////////////////////////////////////
但是增加这个函数调用后,程序就编译出错:error C2275: 'UNICODE_STRING' : illegal use of this type as an expression
百度了一下把问题解决了:
将C在VC++中编译,经常会出现error C2275错误,结果是变量的定义位置不对,应该在函数块的最前面。这是一个编程习惯的问题。
在移植c++代码到c的时候,经常会出现一个奇怪的错误:“error C2275: “xxxxx”: 将此类型用作表达式非法”
这个错误是由于c的编译器要求将变量的申明放在一个函数块的头部,而c++没有这样的要求造成的。
解决的办法就是把变量的声明全部放在变量的生存块的开始。
&&&&推荐文章:
【上篇】【下篇】error&C2275:&“AVFrame”:&将此类型用作表达式非法
vs2010在移植c++代码到c的时候,经常会出现一个奇怪的错误,
如:error C2275: “AVFrame”: 将此类型用作表达式非法。
原因:由于c的编译器要求将变量的申明放在一个函数块的头部,而c++没有这样的要求造成的。
解决办法:把变量的申明全部放在变量的生存块的开始,也即放在程序的开始。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 java非法表达式开始 的文章

 

随机推荐