Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 内联模板函数的编译错误_C++_Templates - Fatal编程技术网

C++ 内联模板函数的编译错误

C++ 内联模板函数的编译错误,c++,templates,C++,Templates,我有一个简单的模板函数,它使用两个参数: template<typename To, typename From>To* asSomething( Common *item) { From * tdnItem = downcast( item, From ); To * someClass = NULL; if( tdnItem != NULL ) { someClass = downcast( tdnItem->gl

我有一个简单的模板函数,它使用两个参数:

template<typename To, typename From>To* asSomething( Common *item)
{
    From  * tdnItem = downcast( item, From );
    To    * someClass = NULL;

    if( tdnItem != NULL ) 
    {
        someClass = downcast( tdnItem->gloo(), To );
    }

    return someClass;
}
templateTo*asSomething(通用*项)
{
From*tdnItem=向下广播(项目,From);
To*someClass=NULL;
如果(tdnItem!=NULL)
{
someClass=downcast(tdnItem->gloo(),To);
}
返回某个类;
}
稍后,我在另一个内联方法中调用此helper方法:

return asSomething<ToFoo, FromFoo>(item);
返回关联项(项目);
但是,我在Visual Studio中遇到一个奇怪的编译错误:

error C2065: 'FromTmeta' : undeclared identifier
see reference to function template instantiation 'To *asSomething<ToFoo,FromFoo>(Common * *)' being compiled
with
[
    To=ToFoo
]
error C2065: 'ToTmeta' : undeclared identifier
错误C2065:'FromTmeta':未声明的标识符
请参阅正在编译的函数模板实例化“to*asSomething(Common**)”的参考
具有
[
too=ToFoo
]
错误C2065:“ToTmeta”:未声明的标识符

函数声明在我看来是正确的,这里有什么问题?

我怀疑
downcast
是一个预处理器宏。如果使用参数将其他内容连接到类型,则预处理器宏和模板参数将无法正常工作

替换

From  * tdnItem = downcast( item, From );

someClass=dynamic_cast(tdnItem->gloo());

错误指向哪一行?我看不到编译器抱怨的
FromTmeta
符号。是在其他地方,还是在示例代码中重命名了它?@immibis第一个错误指向'From*tdnItem'声明。第二个是在asSomething(…)调用中。我怀疑
downcast
是一个宏。如果您使用参数将其他内容连接到类型,宏和模板参数将无法正常工作。是的,downcast(…)是一个宏,您可能是对的,让我检查一下。就是这样,谢谢。虽然我不能使用这个精确的解决方案,但我可以用其他方法替换宏。
From  * tdnItem = dynamic_cast<From*>(item);
someClass = downcast( tdnItem->gloo(), To );
someClass = dynamic_cast<To*>( tdnItem->gloo());