我搜索了这个问题,但我无法弄清楚如何解决这个问题:
class DtEffect;
template <typename VertexFormat>
class DtEffectRenderer : public DtFormatRenderer<VertexFormat>
{
public:
template <typename MemberType>
static DtEffect::VertexAttribPtrInfo VertexAttrib(const MemberType VertexFormat::* member)
{
return DtEffect::VertexAttribPtrInfo(
reinterpret_cast<const GLvoid*>(offsetof(VertexFormat, *member))
, DtAttributeType<MemberType>::value
, DtAttributeType<MemberType>::size);
}
protected:
DtEffect* myEffect;
};
错误讯息:
../../include/vrvGraphics/DtEffectRenderer.h: In static member function ‘static makVrv::DtEffect::VertexAttribPtrInfo makVrv::DtEffectRenderer<VertexFormat>::VertexAttrib(const MemberType VertexFormat::*)’:
../../include/vrvGraphics/DtEffectRenderer.h:115: error: expected primary-expression before ‘(’ token
../../include/vrvGraphics/DtEffectRenderer.h:116: error: expected unqualified-id before ‘*’ token
../../include/vrvGraphics/DtEffectRenderer.h:116: error: expected ‘)’ before ‘*’ token
有什么想法吗?
答案 0 :(得分:5)
您似乎正在尝试使用offsetof
宏来获取通过指向成员的指针识别的成员的偏移量:
offsetof(VertexFormat, *member)
这不起作用,因为offsetof
宏的第二个参数必须是成员的名称,而不是任何可用于访问该成员的表达式。编译错误显然是神秘的,但编译器可以做的很少,因为offsetof
是一个宏。
有关使用指向成员指向查找成员偏移的信息,请参阅0xbadf00d对此Q&A的回答。他的方法仔细复制了offsetof
宏的内部工作方式,但他使用指向成员的指针而不是成员的名字。
答案 1 :(得分:0)
看起来你错过了&#39;(&#39;在VertexAttribPtrInfo之后。我在下面添加了它,尝试查看它是否有效。
template <typename MemberType>
static DtEffect::VertexAttribPtrInfo VertexAttrib(const MemberType VertexFormat::* member)
{
return DtEffect::VertexAttribPtrInfo((
reinterpret_cast<const GLvoid*>(offsetof(VertexFormat, *member))
, DtAttributeType<MemberType>::value
, DtAttributeType<MemberType>::size);
}