C++中的“语法错误:c 常量中有换行符”怎么解决

C/C++(182)
需求:有时候需要在类定义中声明一个常量,怎么声明呢?
常见错误用法:
class Student
&& const int& Len=10;
&& char name[Len];& //错误;声明时,只是描述了对象的形式,并没有真正的创建对象;
}//通俗的讲就是:只是给你说说要给你什么,但并没有给你东西;
//Student类声明中,并没有给Len分配存储10的内存空间,没有地方容纳10,const以后又不允许修改,
建立具体对象时,Len的值不确定
方法1:枚举 enum{ Len=10 }; //相当于开了个欠条,发工资的时候,也就是建立具体对象时,
&&&&&&&&&&&&&&&&&& char name[Len]; //拿这个欠条去换,也就是用10去替换Len,这是有凭证的
方法2:使用static //在财务处单独给你取了钱(在静态存储区分配了存储区存储10的空间)
&&&&&&&&&& const int Len=10;
&&&&&&&&&& char name[Len];
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:292317次
积分:3853
积分:3853
排名:第6355名
原创:40篇
转载:394篇
评论:13条
(1)(7)(6)(11)(1)(7)(16)(19)(9)(73)(43)(17)(64)(42)(2)(4)(37)(18)(16)(34)(7)error C2059: 语法异常:“常量” - C++当前位置:& &&&error C2059: 语法异常:“常量”error C2059: 语法异常:“常量”&&网友分享于:&&浏览:159次error C2059: 语法错误:“常量”为什么会常量呢?
先来看看我的错误出现在哪里,X509_NAME&*directoryN,提示X509_NAME&提示常量。
如何找到这个宏定义呢,在WryCrypt.h
1.但是问件中没有包含这个头文件啊?
宏定义如下:
#define&X509_NAME&((LPCSTR)&7)
2.发生错误的文件是x509v3.h
如图这个文件中包含了#include&&openssl/x509.h&文件,进入这个文件,
它包含#include&&openssl/ossl_typ.h&文件,在&openssl/ossl_typ.h&有两个地方让我觉得很有趣。
1.#ifdef&OPENSSL_SYS_WIN32
#undef&X509_NAME
#undef&X509_EXTENSIONS
#undef&X509_CERT_PAIR
#undef&PKCS7_ISSUER_AND_SERIAL
#undef&OCSP_REQUEST
#undef&OCSP_RESPONSE
2.typedef&struct&X509_name_st&X509_NAME;
我的理解是:先取消了几个宏定义,这里只关心X509_NAME这个宏定义,这个宏定义已被取消。接下来又将struct&X509_name_st定义为X509_NAME.也就是说X509_NAME现在代表一个struct。
而在包含&openssl/ossl_typ.h&的x509.h中又取消了X509_NAME宏定义,如第三图所示。那么现在X509_NAME应该为空不代表任何东西,为什么会报常量错误呢?
------解决方案--------------------引用:Quote: 引用:
先包含&&openssl/ossl_typ.h&,再包含&X509_NAME&*directoryName&定义的头文件呢?
X509_NAME&*directoryName定义的头文件是什么意思,是X509_NAME这个结构体的定义吗,如果是的话,错误还是没解决。
就是说象下面这样。
假如&A.h&里面有&X509_NAME&*directoryN&这句。
那么保证在其它地方&include&A.h&之前,先&include&&openssl/ossl_typ.h&。
如果&B.cpp&里面有&X509_NAME&*directoryN&这句。
那么一定要在它出现之前的某位置&include&&openssl/ossl_typ.h&。
如果你已经这么做了,但仍然出现问题,就当我没说吧,看不到代码我也是连分析带猜的。------解决方案--------------------偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有#include "stdafx.h"
#include &string&
class Data
Data(int RecordIDorTmpID):RecordID(-1),tmpID(RecordIDorTmpID){};
int tmpID;
int RecordID;
// 记录的唯一ID
// 更改列表的每一个对象(完成)
class Update
// 析构函数共有保证能直接delete本类
~Update(){};
// 仅对新增模式有用
Data newData(/*const int a = */0);
// 限制类的创建,将构造函数私有
Update(){};
int _tmain(int argc, _TCHAR* argv[])
问题就出在Update类的Data newData(/*const int a = */0);语句里,按照当前的写法,编译就会产生error C2059: 语法错误:“常量”大错误。如果把中间的注释去掉,Data newData(const int a = 0);就能无错误通过编译。为什么呢?
msdn对此的描述少见的含糊。
第二个源代码框下面的这段话“可能收到 C2059 的另一个特定原因是编译在函数的默认参数中指定了结构的应用程序。 参数的默认值必须是一个表达式。 初始值设定项列表(如用于初始化结构的初始值设定项列表)不是表达式。 其解决方法是定义一个执行所需初始化的构造函数”,我是根据这段话才把常熟0改成const int a = 0这个表达式,但是很明显,我当前的构造函数没有用结构做参数,不符合他所说的,虽然现在程序编译通过了,但是为什么要const int a = 0这样写,这样除了多一个a常量之外和直接传0有什么不同?
而且留意到一个问题,newData实例是在Update里创建的,如果实在main函数之类的地方创建Data类的实例,Data newData(0)绝对是正确可以通过的语法,但是为什么在另一个类里面创建Data的实例newData时却不行呢?
^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群: ^_^本帖子已过去太久远了,不再提供回复功能。2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2008年3月 Linux/Unix社区大版内专家分月排行榜第二
2012年9月 Linux/Unix社区大版内专家分月排行榜第三2007年6月 Linux/Unix社区大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 java中的常量 的文章

 

随机推荐