Johannes Brunen
2017-02-13 11:03:55 UTC
Hello,
I have implemented a class that contains a multi field of category 'weakpointer' (see extract of fcd file below) representing the beacons of the lights managed by this class. Now I would like to add a function setBeacon(const UInt32 idx, Node* beacon) to my class. But I could not succeed in implementing that function . I always get compile errors. What I expected to be the right implementation is the following
void MultiRangeLightChunk::setBeacon(const UInt32 idx, Node* const beacon)
{
OSG_ASSERT(idx < _mfBeacon.size());
editMField(BeaconFieldMask, _mfBeacon);
_mfBeacon.replace(idx, beacon);
}
but that is not going to work. I get the following error for that code:
OSGPointerMField.inl(1173): error C2664:
typedef OSG::PointerMFieldCommon<OSG::PointerAccessHandler<OSG::WeakRefCountPolicy>,0> PointerMFieldCommon_t
typedef OSG::PointerMField<OSG::Node *,OSG::WeakRefCountPolicy,0> PointerMField_t
'void PointerMFieldCommon_t::ptrStoreReplace(PointerMFieldCommon_t::PtrStoreItType,PointerMFieldCommon_t::const_value)'
: cannot convert argument 2 from
'OSG::Node *const ' to
'PointerMFieldCommon_t::const_value'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
OSGPointerMField.inl(1172) : while compiling class template member function 'void PointerMField_t::replace(OSG::UInt32,OSG::Node *const )'
OSGMultiRangeLightChunk.cpp(151) : see reference to function template instantiation 'void PointerMField_t::replace(OSG::UInt32,OSG::Node *const )' being compiled
OSGMultiRangeLightChunkBase.h(222) : see reference to class template instantiation 'PointerMField_t' being compiled
I have tried a lot but do get not my head around this error. Does anyone know how to write correct setBeacon function in that scenario?
Help is really appreciated here.
Best,
Johannes
<FieldContainer
name="MultiRangeLightChunk"
parent="ShaderStorageBufferObjStdLayoutChunk"
library="System"
pointerfieldtypes="both"
structure="concrete"
systemcomponent="true"
parentsystemcomponent="true"
decoratable="false"
useLocalIncludes="false"
docGroupBase="GrpSystemState"
<Field
name="color"
type="Color3f"
cardinality="multi"
visibility="external"
access="protected"
</Field>
...
<Field
name="beacon"
type="Node"
category="weakpointer"
cardinality="multi"
visibility="external"
access="protected"
</Field>
</FieldContainer>
I have implemented a class that contains a multi field of category 'weakpointer' (see extract of fcd file below) representing the beacons of the lights managed by this class. Now I would like to add a function setBeacon(const UInt32 idx, Node* beacon) to my class. But I could not succeed in implementing that function . I always get compile errors. What I expected to be the right implementation is the following
void MultiRangeLightChunk::setBeacon(const UInt32 idx, Node* const beacon)
{
OSG_ASSERT(idx < _mfBeacon.size());
editMField(BeaconFieldMask, _mfBeacon);
_mfBeacon.replace(idx, beacon);
}
but that is not going to work. I get the following error for that code:
OSGPointerMField.inl(1173): error C2664:
typedef OSG::PointerMFieldCommon<OSG::PointerAccessHandler<OSG::WeakRefCountPolicy>,0> PointerMFieldCommon_t
typedef OSG::PointerMField<OSG::Node *,OSG::WeakRefCountPolicy,0> PointerMField_t
'void PointerMFieldCommon_t::ptrStoreReplace(PointerMFieldCommon_t::PtrStoreItType,PointerMFieldCommon_t::const_value)'
: cannot convert argument 2 from
'OSG::Node *const ' to
'PointerMFieldCommon_t::const_value'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
OSGPointerMField.inl(1172) : while compiling class template member function 'void PointerMField_t::replace(OSG::UInt32,OSG::Node *const )'
OSGMultiRangeLightChunk.cpp(151) : see reference to function template instantiation 'void PointerMField_t::replace(OSG::UInt32,OSG::Node *const )' being compiled
OSGMultiRangeLightChunkBase.h(222) : see reference to class template instantiation 'PointerMField_t' being compiled
I have tried a lot but do get not my head around this error. Does anyone know how to write correct setBeacon function in that scenario?
Help is really appreciated here.
Best,
Johannes
<FieldContainer
name="MultiRangeLightChunk"
parent="ShaderStorageBufferObjStdLayoutChunk"
library="System"
pointerfieldtypes="both"
structure="concrete"
systemcomponent="true"
parentsystemcomponent="true"
decoratable="false"
useLocalIncludes="false"
docGroupBase="GrpSystemState"
<Field
name="color"
type="Color3f"
cardinality="multi"
visibility="external"
access="protected"
</Field>
...
<Field
name="beacon"
type="Node"
category="weakpointer"
cardinality="multi"
visibility="external"
access="protected"
</Field>
</FieldContainer>