OGRE 不存在合适的转换函数

Posted

技术标签:

【中文标题】OGRE 不存在合适的转换函数【英文标题】:OGRE No suitable conversion function exists 【发布时间】:2014-07-15 22:40:07 【问题描述】:

我很难在 Visual Studio 2013 中编译应用程序。我已经解决了很多错误,但我找不到最后一个错误的解决方案。

这里是:

void Application::setupRenderSystem() 
mState->dumpValues();

String val = mState->getStringValue("renderSystem");
RenderSystemList *renderSystems = mRoot->getAvailableRenderers();
RenderSystemList::iterator r_it;    

bool renderSystemFound = false;
for (r_it = renderSystems->begin(); r_it != renderSystems->end(); r_it++) 
    RenderSystem *tmp = *r_it;
    std::string rName(tmp->getName());

    // returns -1 if string not found
    if ((int)rName.find(val) >= 0) 
        mRoot->setRenderSystem(*r_it);
        renderSystemFound = true;
        break;
    
        
if (!renderSystemFound) 
    OGRE_EXCEPT(0, "Specified render system (" + val + ") not found, exiting...", "Application")

Visual Studio 指出RenderSystemList *renderSystems = mRoot->getAvailableRenderers(); 是问题所在,尤其是mRoot

这是我得到的错误: 错误 C2440: 'initializing' : 无法从 'const Ogre::RenderSystemList' 转换为 'Ogre::RenderSystemList *'

【问题讨论】:

【参考方案1】:

getAvailableRenderers 方法不返回指向RenderSystemList 的指针。您希望将值存储在对 RenderSystemList 的引用中:

RenderSystemList const& renderSystems = mRoot->getAvailableRenderers();

【讨论】:

谢谢。现在的问题是renderSystems->begin()renderSystems->end() 应该是指针。这是我得到的错误:Expression must have a pointer type renderSystems 不是指针。您使用. 而不是->-> 运算符仅用于指针。【参考方案2】:

Ogre API 说:

const RenderSystemList &    getAvailableRenderers (void)

所以它返回一个常量引用而不是一个指针。 像这样修改你的代码

const RenderSystemList &renderSystems = mRoot->getAvailableRenderers();

【讨论】:

以上是关于OGRE 不存在合适的转换函数的主要内容,如果未能解决你的问题,请参考以下文章

不存在合适的构造函数来将“test *”转换为“test”,构造函数,

不存在从 std 字符串到 const char * 的合适转换函数

不存在从“const std::string”到“char *”的合适转换函数?

OpenCv 第一步 - 不存在合适的构造函数来将“IplImage *”转换为“cv::_InputArray”

如何摆脱“Intellisense:没有合适的转换函数从“std::string”到“std::string *”存在”错误?

没有合适的从“const std :: string”到“time_t”的转换函数