Function mismatch between vectors with identical stored types
up vote
0
down vote
favorite
I have define a template function called "Create2DBBox" just for create bounding boxes from a point cloud vector, the implementation details are less important.
I want to use the template PointT type for accepting different Point type such as PointXYZ or `PointXYZI', the problem is when I define the function like below:
```
template<typename PointT>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<std::vector<pcl::PointCloud<PointT>, Eigen::aligned_allocator<pcl::PointCloud<PointT> >>> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
{
std::vector<BBox2D> bbox_vec_res;
for(int i = 0; i < cloudVecIn->size(); ++i) {
BBox2D bbox((*cloudVecIn)[i], projectMatrix, imageSize);
bbox_vec_res.push_back(bbox);
}
return bbox_vec_res;
}
When I use this function as below:
std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI>>> clustered_vec = ogm_detector_.get_clustered_cloud_vec();
vector<BBox2D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
I get the error:
error: no matching function for call to ‘Create2DBBox(std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI> > >&, Eigen::MatrixXf&, cv::Size)’
D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
I don't know, and I guess it must be the fisrt template argument cause. Thanks for any help.
c++ vector allocator function-templates
New contributor
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
up vote
0
down vote
favorite
I have define a template function called "Create2DBBox" just for create bounding boxes from a point cloud vector, the implementation details are less important.
I want to use the template PointT type for accepting different Point type such as PointXYZ or `PointXYZI', the problem is when I define the function like below:
```
template<typename PointT>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<std::vector<pcl::PointCloud<PointT>, Eigen::aligned_allocator<pcl::PointCloud<PointT> >>> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
{
std::vector<BBox2D> bbox_vec_res;
for(int i = 0; i < cloudVecIn->size(); ++i) {
BBox2D bbox((*cloudVecIn)[i], projectMatrix, imageSize);
bbox_vec_res.push_back(bbox);
}
return bbox_vec_res;
}
When I use this function as below:
std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI>>> clustered_vec = ogm_detector_.get_clustered_cloud_vec();
vector<BBox2D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
I get the error:
error: no matching function for call to ‘Create2DBBox(std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI> > >&, Eigen::MatrixXf&, cv::Size)’
D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
I don't know, and I guess it must be the fisrt template argument cause. Thanks for any help.
c++ vector allocator function-templates
New contributor
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I have define a template function called "Create2DBBox" just for create bounding boxes from a point cloud vector, the implementation details are less important.
I want to use the template PointT type for accepting different Point type such as PointXYZ or `PointXYZI', the problem is when I define the function like below:
```
template<typename PointT>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<std::vector<pcl::PointCloud<PointT>, Eigen::aligned_allocator<pcl::PointCloud<PointT> >>> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
{
std::vector<BBox2D> bbox_vec_res;
for(int i = 0; i < cloudVecIn->size(); ++i) {
BBox2D bbox((*cloudVecIn)[i], projectMatrix, imageSize);
bbox_vec_res.push_back(bbox);
}
return bbox_vec_res;
}
When I use this function as below:
std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI>>> clustered_vec = ogm_detector_.get_clustered_cloud_vec();
vector<BBox2D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
I get the error:
error: no matching function for call to ‘Create2DBBox(std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI> > >&, Eigen::MatrixXf&, cv::Size)’
D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
I don't know, and I guess it must be the fisrt template argument cause. Thanks for any help.
c++ vector allocator function-templates
New contributor
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I have define a template function called "Create2DBBox" just for create bounding boxes from a point cloud vector, the implementation details are less important.
I want to use the template PointT type for accepting different Point type such as PointXYZ or `PointXYZI', the problem is when I define the function like below:
```
template<typename PointT>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<std::vector<pcl::PointCloud<PointT>, Eigen::aligned_allocator<pcl::PointCloud<PointT> >>> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
{
std::vector<BBox2D> bbox_vec_res;
for(int i = 0; i < cloudVecIn->size(); ++i) {
BBox2D bbox((*cloudVecIn)[i], projectMatrix, imageSize);
bbox_vec_res.push_back(bbox);
}
return bbox_vec_res;
}
When I use this function as below:
std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI>>> clustered_vec = ogm_detector_.get_clustered_cloud_vec();
vector<BBox2D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
I get the error:
error: no matching function for call to ‘Create2DBBox(std::shared_ptr<std::vector<pcl::PointCloud<pcl::PointXYZI> > >&, Eigen::MatrixXf&, cv::Size)’
D> bbox_vec = sensors_fusion::Create2DBBox(clustered_vec, this->transform_matrix_, Size(this->image_raw_.cols, image_raw_.rows));
I don't know, and I guess it must be the fisrt template argument cause. Thanks for any help.
c++ vector allocator function-templates
c++ vector allocator function-templates
New contributor
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited yesterday
Matthieu Brucher
4,7481127
4,7481127
New contributor
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked yesterday
Haiming Zhang
11
11
New contributor
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Haiming Zhang is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
They are not the same, as your function tales a shared pointer to a vector with a custom allocator.
As your function doesn't depend on the allocator, do:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<Container> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
And even, you don't need the shared pointer, so:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const Container& cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
They are not the same, as your function tales a shared pointer to a vector with a custom allocator.
As your function doesn't depend on the allocator, do:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<Container> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
And even, you don't need the shared pointer, so:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const Container& cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
add a comment |
up vote
1
down vote
They are not the same, as your function tales a shared pointer to a vector with a custom allocator.
As your function doesn't depend on the allocator, do:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<Container> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
And even, you don't need the shared pointer, so:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const Container& cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
add a comment |
up vote
1
down vote
up vote
1
down vote
They are not the same, as your function tales a shared pointer to a vector with a custom allocator.
As your function doesn't depend on the allocator, do:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<Container> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
And even, you don't need the shared pointer, so:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const Container& cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
They are not the same, as your function tales a shared pointer to a vector with a custom allocator.
As your function doesn't depend on the allocator, do:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const std::shared_ptr<Container> cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
And even, you don't need the shared pointer, so:
template<typename Container>
std::vector<BBox2D> Create2DBBox(const Container& cloudVecIn, const Eigen::MatrixXf& projectMatrix, const cv::Size& imageSize)
answered yesterday
Matthieu Brucher
4,7481127
4,7481127
add a comment |
add a comment |
Haiming Zhang is a new contributor. Be nice, and check out our Code of Conduct.
Haiming Zhang is a new contributor. Be nice, and check out our Code of Conduct.
Haiming Zhang is a new contributor. Be nice, and check out our Code of Conduct.
Haiming Zhang is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53238388%2ffunction-mismatch-between-vectors-with-identical-stored-types%23new-answer', 'question_page');
}
);
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password