【问题标题】:C++ How to have a vector of objects depending on template type [closed]C ++如何根据模板类型拥有对象向量[关闭]
【发布时间】:2016-12-21 14:28:57
【问题描述】:

我有一个模板类 C,它应该包含一个带有 E 对象的向量。向量中的 E 对象将存储与模板相同的类型。因此,如果 C 对象的类型为 int,则向量应包含 E 对象,其中包含 int,如果 C 具有 double,则 E 应存储 double 等。代码如下所示:

template<class T> class C {
public:
    class E {
    private:
        T value;    //if C has type int then the events should store int
        std::string description;
    public:
        Event(std::string desc, T val) {
            this->description = desc;
            this->value = val;
        }
    };
    C();
    virtual ~C();

    bool add_e (std::string description);

private:
    T c_value;
    std::vector<E> c_vector; //this should look somewhat like [E<int>, E<int>, E<int>]
};

这可以编译,但是当我尝试像这样在 C.cpp 文件中向 c_vector 添加元素时:

template<class T>
bool C<T>::add_e(std::string description) {
    c_vector.add(E(description, c_value));
}

我得到错误:'class std::vector ::E, std::allocator::E >>' 没有名为 'add' 的成员。到底是怎么回事?如何存储与封闭模板类类型 C 相同类型的 E 对象?

当我尝试在网上搜索时,我只能找到有关在向量中存储不同模板类型的信息,例如将 E 设为抽象类的派生类,然后将抽象类指针存储在向量中,但我想要所有包含相同类型的元素。

【问题讨论】:

  • 你需要阅读更多关于std::vector的信息。它从来没有任何add 功能。
  • push_back() 呢??
  • 谢谢!太习惯Java了...我改成push_back现在完美运行了
  • 不要修复问题中的代码,因为现在看起来你问“我有这个代码:,为什么不工作?”。 @burakozgul 可以把它写成答案而不是评论。
  • 您的编辑现在使问题变得毫无意义(错误不匹配更正的代码)...

标签: c++ templates vector inner-classes


【解决方案1】:

使用来自std::vectorpush_back()

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    • 2018-11-03
    • 2020-07-08
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多