如何正确返回带有A类元素的向量?

时间:2011-07-25 23:37:47

标签: c++ templates

在底层示例中:如何避免方法get_Children会抱怨返回类型不正确?

或者使用编译器语言:

test.cpp:在成员函数std::vector<A, std::allocator<A> > B::getVector() const中: test.cpp:38:错误:传递const Box<A> this std::vector<T,std::allocator<_CharT> > Box<T>::get_Children() [with T = A]参数丢弃限定符

#include <vector>
using namespace std;

template <class T> class Box
{
    private:
        std::vector<T> m_data;

    public:
        Box() {};
        virtual ~Box() {}

        void Add(T const &d);
        void Remove();

        T get_Child(size_t i) const;
        size_t get_ChildCount() const;
        std::string get_ChildNames() const;
        std::vector<T> get_Children() { return m_data; }
};

class A
{
    public:
        A();
        ~A();
};

class B
{
    private:
        Box<A> m_Container;
        B(const B &orig);

    public:
        B();
        ~B();
        std::vector<A> getVector() const { return m_Container.get_Children();}
};

int main()
{
    B b;
    std::vector<A> a_vector;

    a_vector = b.getVector();

    return 0;
}

1 个答案:

答案 0 :(得分:4)

Box<T>::get_Children()声明为const。因为B::getVector()是const,所以它无法访问B成员的非const函数。