gpt4 book ai didi

c++ - 粘贴 "::"和 "Foo"不会提供有效的预处理 token

转载 作者:太空狗 更新时间:2023-10-29 20:03:37 25 4
gpt4 key购买 nike

我想将 MyNamespace::附加到宏定义的函数中:

#define transFunc(func)                                                    \
dimensionedScalar func(const dimensionedScalar& ds) \
{ \
if (!ds.dimensions().dimensionless()) \
{ \
FatalErrorIn(#func "(const dimensionedScalar& ds)") \
<< "ds not dimensionless" \
<< abort(FatalError); \
} \
\
return dimensionedScalar \
( \
#func "(" + ds.name() + ')', \
dimless, \
MyNameSpace::##func(ds.value()) \
);

\

但是当我打电话的时候

transFunc(Foo)

编译器抛出以下错误:

pasting "::" and "Foo" does not give a valid preprocessing token

我上面连接标记的方式有什么问题?

最佳答案

## 用于将两个标记组合在一起以形成单个标记。所以像 func##1 这样的东西会扩展为单个标记 func1

在此处使用它,它会尝试将 ::Foo 结合在一起以生成单个标记 ::Foo。正如错误所说,这不是有效的 token 。您不需要这里的单个 token ;您只想将两个标记分开:

MyNameSpace::func(ds.value())

关于c++ - 粘贴 "::"和 "Foo"不会提供有效的预处理 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com