繁体   English   中英

在Eclipse C ++上进行矢量实例化的无效模板参数

[英]Invalid Template Argument for vector instantiation on Eclipse C++

我在C ++中有这样的代码:

#include <iostream>
#include <vector>

using namespace std;

.....................
.....................

int main(void)
{
    std::vector<std::shared_ptr<Object>> objects, fitting_objects;

    objects.push_back(new Rectangle(10, 10, 20, 20)); // classic polymorphism spectacle

    // rectangle for the area containing the objects we're looking for
    Rectangle r(5, 5, 30, 30);

    for(auto const& object : objects)
        if(object.fitsIn(r))
            fitting_objects.push_back(object);

    return 0;
}

我不明白为什么会收到“无效的模板参数”错误。 有类似的人也遇到过与我相同的问题。 我已经实现了与他们相同的解决方案,但是我无法走得更远。

我该如何解决该问题?

std::shared_ptr构造函数是显式的 您需要push_back一个shared_ptr或使用std::vector::emplace_back代替

objects.push_back(std::make_shared<Rectangle>());
objects.emplace_back(new Rectangle(10, 10, 20, 20)); // OK, careful if emplace_back throws, thanks @Simple

重现此问题的最小示例:

#include <iostream>
#include <memory>
#include <vector>

struct X{};

int main()
{
    std::vector<std::shared_ptr<X>> v;
    // v.push_back(new X); // does not compile
    v.push_back(std::shared_ptr<X>(new X)); // OK
    v.emplace_back(new X); // OK, careful if emplace_back throws, thanks @Simple
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM