2016-04-26 15 views
1

「(」の前に、私はこの質問を検索するが、これを解決する方法を見つけ出すことができません:予期しない主要表現トークン

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

VertexFormat :: * '? myEffect-> setVertexAttribPointers(のsizeof(DtLineVertex)、 VertexAttrib(&DtLineVertex ::位置)、 VertexAttrib(&DtLineVertex ::色)、 VertexAttrib(&DtLineVertex ::オフセット)、 VertexAttrib(&DtLineVertex: – erip

+0

その使用はとても似ています:: directionAndLength)); – psquare

+1

[mcve]を入力してください。 – Barry

答えて

5

あなたがポインタ・ツー・部材を介して識別されるメンバーへのオフセットを取得するマクロoffsetofを使用しようとしていることが表示されます:

offsetof(VertexFormat, *member) 

これが仕事に行くされていない、の2番目のパラメータので、 offsetofマクロはメンバーにアクセスするために使用できる種類の式ではなく、メンバーの名前でなければなりません。コンパイルエラーは明らかにわかりにくいですが、offsetofはマクロなので、コンパイラはほとんど実行できません。

メンバーへのポインタを使用してメンバオフセットを見つける方法については、Q&A0xbadf00dの回答を参照してください。彼のアプローチは、offsetofマクロの内部動作を厳密に再現しますが、メンバ名の代わりにメンバへのポインタを使用します。

0

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); 
} 
+0

それは動作しません。私はWindowsがうまくコンパイルされていないと思っていますが、gccにはありません – psquare

+0

うわー、それを混乱させて、私の間違いです。 –

関連する問題