2016-05-31 7 views
0

私は構造体ました:struct string memberを参照するには?

struct User { 
~User(); 
Datacratic::Id id;      ///< Exchange-specific user ID 
Datacratic::Id buyeruid;    ///< Exchange seat-specific user ID 
Datacratic::TaggedInt yob;    ///< Year of birth 
std::string gender;    ///< Gender: Male, Female, Other 
Datacratic::CSList keywords;   ///< List of keywords of consumer intent 
Datacratic::UnicodeString customdata;   ///< Custom data from exchange 
Datacratic::Optional<Geo> geo;     ///< Geolocation of user at registration 
std::vector<Data> data;   ///< User data segments 
Json::Value ext; 
} 

私はuser.genderで性別を参照すると、それは言う:コンパイラエラーから

error: âstruct Datacratic::Optional<OpenRTB::User>â has no member named âgenderâ 
     result->segments.addStrings("gender", result->user.gender); 

おかげで、 アン

+3

[(非常に曖昧な)ドキュメント](http://rtbkit.org/dox/0.9/structOpenRTB_1_1Optional.html)によると、Datacratic :: Optionalはポインタのように動作します。私は[このディスカッション](https://groups.google.com/a/rtbkit.org/forum/#!topic/discuss/ibmezgov214)のためにのみこれを発見しました。 'result-> user-> gender'は機能しますか? –

+0

はい、私はユーザー構造からジェンダーを追加しようとしていますが、それは文句を言います。 @Rhymoid –

+0

コンパイラは 'result-> segments.addStrings(" gender "、result-> user-> gender)を受け付けますか?もしそうなら、あなたはそれが動作すると期待どおりに動作しますか?そうでない場合、コンパイラは異なるエラーを出しますか? –

答えて

0

result->userがあるように、それは私には見えますタイプOpenRTB::Userであり、struct Userクラスとは異なる場合があります。したがって、タイプUserresult->userを作成するか、OpenRTB::Userクラスを拡張して追加のフィールドを追加します。 OpenRTB::User *からフィールドにアクセスするには、動的キャストをUser *にキャストします。

+0

同じように、Struct Userは名前空間OpenRTBを持つファイルにあります。どのように動的にキャストするのですか? –

+0

あなたの '' 'User'''は、' 'OpenRTB :: User'''を動的にキャストするために拡張する必要があります。構文は '' 'dynamic_cast (結果 - >ユーザ)' ''です。もし '' User * ''を '' 'result-> user'''に入れても' '' User'''が '' '' OpenRTB :: User'''をサブクラス化していないことが確かであれば、上記と同じ構文で '' reinterpret_cast'''を実行する必要があります。 – kaspersky

+0

ユーザーはDatacratic :: Optional ユーザーです。 (result-> user)またはdynamic_cast を使用してresult-> segments.addStrings( "gender"、result-> user-> gender) result-> user)は動作しません! @ gg.kaspersky –

関連する問題