在构造函数上初始化一个名为 ManageRenderListenerCommand 的类时,我在 C++(MVS 2010)上遇到了异常行为。这是作为命令设计模式实现的,其中 ManageRenderListenerCommand 命令是具体命令之一。
我称之为 ManageRenderListenerCommand 的地方
void Mediator::change(Negotiator* negotiator, NegotiatorEvent& negotiatorEvent){
ICommand* command = NULL;
if(negotiatorEvent.matchEvent("addToViewport")){
command = static_cast<ICommand*> (&AddToViewportCommand(mCameraManager, mSceneCreator, mEngine));
}else if (negotiatorEvent.matchEvent("manageRenderListener")){
command = static_cast<ICommand*> (&ManageRenderListenerCommand(mObserverRegistry, mEngine, negotiatorEvent.getMessage()));
}
//Execute the created command
if (command) command->execute();
}
negotiatorEvent.getMessage()
正如您在代码中看到的,ManageRenderListener 接收一个字符串,在这种情况下,该字符串包含 NegotiatorEvent 类 ( )中包含的单词 add 。
问题是,在构造函数上,我将字符串放在私有成员上,但是在分配和强制转换之后我可以看到调试被删除并重新初始化为“”。我试过static_cast、dynamic_cast。为了提供线索,我认为这是一个可见性问题,但我不知道如何管理它。
}else if (negotiatorEvent.matchEvent("manageRenderListener")){
//Here mMessage = ""
command = static_cast<ICommand*> (&ManageRenderListenerCommand(mObserverRegistry, mEngine, negotiatorEvent.getMessage()));
//Here mMessage is again "" instead of add
}
管理渲染监听器.cpp
#include "ManageRenderListenerCommand.h"
ManageRenderListenerCommand::ManageRenderListenerCommand(
OgreRenderObserverRegistry* observerRegistry,
OgreEngine* engine,
string message):
mObserverRegistry(observerRegistry),
mEngine(engine),
mMessage(message){
}
void ManageRenderListenerCommand::execute(){
if (mMessage.compare("add") == 0){
mEngine->addRenderListener(mObserverRegistry->getCachedObserver());
}else if (mMessage.compare("detach") == 0){
mEngine->detachRenderListener(mObserverRegistry->getCachedObserver());
}
}
如果您需要更多详细信息,请索取。谢谢你的帮助。