0

我是 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'

我需要在预处理期间重新定义 fromThis* 和 fromThis 。#define 宏中的特殊字符是否不允许?我怎样才能解决这个代码?


EDIT-1:我正在寻找可能的解决方案。我正在尝试将 *fromThis 替换为 'toThisPtr'。一种建议的解决方案是使用 typedef。我喜欢下面的。

typedef toThisPtr   fromThis*;
typedef toThisObj   fromThis;

现在有了这个解决方案,我得到的错误是:

错误 C2143:语法错误:缺少“;” 在'*'错误C2059之前:语法错误:';' 错误 C2040:“iovec”:“toThisObj”与“toThisPtr”的间接级别不同

typedef 可以解决这个问题。将 fromThis* 替换为 toThisPtr 的标准方法是什么?

4

4 回答 4

3

文档#define说它的第一个参数是一个标识符。标识符只能包含字母、数字和下划线,并且不能以数字开头。

因此,fromThis*不是一个有效的标识符,你不能把#define它换成别的东西。

于 2012-07-30T05:59:37.027 回答
0

也许你只是把它倒过来了

#define toThisPtr fromThis*
#define toThisObj fromThis

这定义了两个称为 toThisPtr 和 toThisObj 的宏。否则我很难理解你想要做什么。

于 2012-07-30T05:59:37.620 回答
0

你不能这样做,也不应该这样做。:)

为此,我个人会使用typedefs 而不是宏。

typedef toThisPtr fromThis*
typedef toThisObj fromThis

然后全部替换。

于 2012-07-30T05:59:46.450 回答
0

您不能在名称中使用 *。请参阅文档的摘录:

您可以将任何有效标识符定义为宏,即使它是 C 关键字

有效标识符是一个或多个字母、数字或下划线字符 (_) 的序列。空格、标点符号或符号都不能成为标识符的一部分。只有字母、数字和单下划线字符有效。此外,变量标识符总是必须以字母开头。

于 2012-07-30T06:08:47.367 回答