无法将参数从 T 转换为 T&
Cannot convert parameter from T to T&
我在调用专用模板函数时遇到问题。
我的代码是这样的:
namespace{
struct Y {};
}
template<>
bool pcl::visualization::PCLVisualizer::addPointCloud<Y>(const typename pcl::PointCloud< Y >::ConstPtr &cloud, const std::string &id, int viewport);
调用点是:
pcl::PointCloud<Y>::Ptr cloud(new pcl::PointCloud<Y>);
visualizer->addPointCloud(cloud, "cloud", 0);
我得到的错误是
'bool pcl::visualization::PCLVisualizer::addPointCloud(const boost::shared_ptr<T> &,const std::string &,int)' : cannot convert parameter 1 from 'boost::shared_ptr<T>' to 'const boost::shared_ptr<T> &'
以下是库中的一些声明和类型定义:
typedef boost::shared_ptr<PointCloud<PointT> > Ptr;
typedef boost::shared_ptr<const PointCloud<PointT> > ConstPtr;
template <typename PointT> bool pcl::visualization::PCLVisualizer::addPointCloud(
const typename pcl::PointCloud<PointT>::ConstPtr &cloud,
const std::string &id, int viewport
)
我已经尝试过boost::shared_ptr<const pcl::PointCloud<Y> > cloud;
,但同样的错误再次出现。
拼命尝试调试库中的一个问题,如果我可以访问一个私有地图并遍历它,这将非常容易调试,但我无法编译整个库,因为这需要一些时间(我只是想偷看它 - 我知道这是错误的,但我整天都在为此苦苦挣扎)
编译器是 VC++ 10。
谢谢
显然T
两次出现在错误消息中都不一样。
具体来说,由于您的标头使用 ConstPtr
并且调用方代码使用 Ptr
,我怀疑一个是shared_ptr<Object>
,另一个是shared_ptr<const Object>
的。 然后会产生错误,因为这些类型不相关。
首先,谢谢大家回答我这个问题。Ben Voigt 帮助指导我查看模板参数,而不是实际的类型转换错误消息,以及 Yakk 写下他的代码。
与此同时,我试图将我的代码分解为一个简单的函数,这次这为我带来了不同的错误!
#include <iostream>
#include <memory>
template<typename PointT>
class PointCloud
{
public:
typedef std::shared_ptr<PointCloud<PointT> > Ptr;
typedef std::shared_ptr<const PointCloud<PointT> > ConstPtr;
};
class PCLVisualizer
{
public:
template<typename PointT>
bool addPointCloud(
const typename PointCloud<PointT>::ConstPtr &cloud,
const std::string &id, int viewport
){}
};
namespace{
struct Y {};
}
template<>
bool PCLVisualizer::addPointCloud<Y>(const typename PointCloud< Y >::ConstPtr &cloud, const std::string &id, int viewport)
{
return true;
}
int main()
{
PCLVisualizer p;
PointCloud<Y>::Ptr cloud(new PointCloud<Y>());
p.addPointCloud(cloud, "cloud", 0);
}
现在的错误是:
error C2783: 'bool PCLVisualizer::addPointCloud(const PointCloud<PointT>::ConstPtr &,const std::string &,int)' : could not deduce template argument for 'PointT'
所以,我现在首先看到了我需要做什么(我要出去拍摄自己,因为我现在感觉不是很聪明:)):
getVisualizer()->addPointCloud<Y>(cloud, "cloud", 0);
再次感谢大家!
#include <string>
#include <memory>
namespace{
struct Y {};
}
template<typename T>
struct PointCloud {
typedef std::shared_ptr<PointCloud<T>> Ptr;
typedef std::shared_ptr<const PointCloud<T>> ConstPtr;
};
template<typename T>
void addPointCloud(typename PointCloud<T>::ConstPtr const &cloud) {}
int main() {
PointCloud<Y>::Ptr cloud(new PointCloud<Y>());
addPointCloud<Y>( cloud );
}
上面的代码运行良好。 因此,无论您的问题是什么,它都不在您向我们展示的代码中。
相关文章:
- C++转换参数初始化问题
- C2664 无法从'initializer list'转换参数
- 隐式可转换参数,但属于引用类型
- 传递到函数(C )时转换参数
- 了解错误 C2664:无法转换参数 1
- 错误 C2664:无法从'NvPhysicalGpuHandle'转换参数 1
- Unicode 字符问题/转换参数
- 在运行时根据某些元数据强制转换参数包值
- 错误 C2664:"errno_t wcstombs_s(size_t *,字符 *,size_t,常量 wchar_t *,size_t)":无法转换参数 4
- 错误C2664:无法转换参数错误
- 无法转换参数错误
- Boost.python自动转换参数
- "尝试升级使用已弃用的转换参数指定的输入文件"是什么意思?
- 是否可以在函数模板中转换参数C++?
- 错误C2664:无法转换参数(指纹传感器检测)
- 无法转换参数 - 模板错误
- 编译zxing时,Libconv无法转换参数
- C++ 无法转换参数
- std::p air<_Ty1,_Ty2>::p air<_Ty1,_Ty2>& 无法转换参数
- 无法转换参数-转换丢失限定符