【发布时间】:2016-04-21 09:48:35
【问题描述】:
我有这个多重集容器:
multiset<IMidiMsgExt, IMidiMsgExtComp> queuedNotes;
IMidiMsgExt 是我自己创建的一个结构(我需要它作为一个附加属性,mTick),它扩展了IMidiMsg:
struct IMidiMsgExt : public IMidiMsg
{
IMidiMsgExt() {
}
double mTick = 0.;
void IMidiMsgExt::MakeNoteOnMsg(int noteNumber, int velocity, int offset, double tick, int channel)
{
Clear();
mStatus = channel | (kNoteOn << 4);
mData1 = noteNumber;
mData2 = velocity;
mOffset = offset;
mTick = tick;
}
void IMidiMsgExt::MakeNoteOffMsg(int noteNumber, int offset, double tick, int channel)
{
Clear();
mStatus = channel | (kNoteOff << 4);
mData1 = noteNumber;
mOffset = offset;
mTick = tick;
}
void IMidiMsgExt::Clear()
{
mOffset = 0;
mStatus = mData1 = mData2 = 0;
mTick = 0.;
}
};
下一步:我在那个queuedNotes 中存储了一些IMidiMsgExt 对象,其中:
IMidiMsgExt* noteOff = new IMidiMsgExt;
noteOff->MakeNoteOffMsg(57, 0, tickSize * 111, 0);
queuedNotes.insert(*noteOff);
现在,我需要使用一个名为 SendMidiMsg(IMidiMsg* pMsg) 的函数(将 IMidiMsg 类型作为输入)将我的对象 IMidiMsgExt 发送给它。
我从列表中提取第一个对象到迭代器:
auto midiMessage = queuedNotes.begin();
但是当我尝试投射它并使用SendMidiMsg:
SendMidiMsg((IMidiMsgExt*)midiMessage);
上面写着no suitable conversion function from "std::_Tree_const_iterator<std::_Tree_val<std::_Tree_simple_types<IMidiMsgExt>>>" to "IMidiMsg *" exists
我哪里错了?我应该使用dynamic casting吗?
【问题讨论】:
标签: c++ inheritance casting iterator