我是C ++的新手,面对下面提到的一个简单的问题。 在visual C ++ 2008中,我试图#define类似
#define fromThis* toThisPtr
#define fromThis toThisObj
我正在移植一些用linux编写的代码,需要根据winapi进行移植。我得到的错误 像这样的东西。
error C2008: '*' : unexpected in macro definition
warning C4005: 'fromThis' : macro redefinition
see previous definition of 'fromThis'
我需要在预处理时间从此*和此重新定义。 #define宏中的特殊字符是不允许的? 我该如何处理这段代码?
EDIT-1: 我正在寻找可能的解决方案。我试图将*从这个回复到'toThisPtr'。一个建议的解决方案是使用typedef。我在下面做了。
typedef toThisPtr fromThis*;
typedef toThisObj fromThis;
现在有了这个解决方案,我得到的错误是:
错误C2143:语法错误:缺少';'在'*'之前 错误C2059:语法错误:';' 错误C2040:'iovec':'toThisObj'的间接级别与'toThisPtr'不同
可以typedef成为这个问题的解决方案。什么是从这个*替换为toThisPtr的标准方法?
答案 0 :(得分:3)
#define
的{{3}}表示其第一个参数是标识符。标识符只能包含字母,数字和下划线,不得以数字开头。
因此,fromThis*
不是有效的标识符,您不能将#define
改为其他标识符。
答案 1 :(得分:0)
也许你刚刚倒退了
#define toThisPtr fromThis*
#define toThisObj fromThis
这定义了两个名为toThisPtr和toThisObj的宏。否则,我很难理解你想要做什么。
答案 2 :(得分:0)
你不能真的这样做,也不应该。 :)
为此,我个人使用typedef
而不是宏。
typedef toThisPtr fromThis*
typedef toThisObj fromThis
然后只需替换所有。
答案 3 :(得分:0)
您不能在名称中使用*。 请参阅文档中的摘录:
您可以将任何有效的标识符定义为宏,即使它是C 关键字
有效标识符是一个或多个字母,数字或的序列 下划线字符(_)。无论是空格还是标点符号或 符号可以是标识符的一部分。只有字母,数字和单个 下划线字符有效。另外,变量标识符 总是要写一封信。