来自不同命名空间的std :: vector push_back类

时间:2018-04-09 17:34:59

标签: c++

我有一个小例子。

我试图从不在同一名称空间中的类向我的std :: vector添加数据。

两个班级都是一样的。

如何将数据从不在同一名称空间中的类推送到矢量

class A
{
public:
    std::string name;
    int32_t Size;
};

namespace TEST {

    class A
    {
    public:
        std::string name;
        int32_t Size;
    };

    class File
    {
    public:
        std::vector<A> data;

    };
}

int main()
{
    A data = { "outside namespace", 10 };

    TEST::File file;
    file.data.push_back(data);

    return 0;
}

4 个答案:

答案 0 :(得分:2)

  

如何将数据从不相同的类推送到矢量   命名空间

问题不是真正不同的命名空间,但问题是 def index @locations = Location.order_by_parent(top: nil) end A是两个不同的类,你不能将TEST::A推送到A s的向量中

答案 1 :(得分:2)

我想你需要TEST::A中的额外构造函数来复制全局A中的成员:

namespace TEST {

    class A
    {
    public:
        A(const ::A& a) :
            name(a.name),
            Size(a.Size)
        {}

        std::string name;
        int32_t Size;
    };
...

当推送到矢量时,请执行以下操作:

int main()
{
    A data = { "outside namespace", 10 };

    TEST::File file;
    file.data.push_back(TEST::A(data));

    return 0;
}

答案 2 :(得分:1)

使用命名空间名称限定名称:

TEST::A data = { "outside namespace", 10 };

ATEST::A是两个不同的类。

答案 3 :(得分:0)

您声明向量以接受其名称空间中相关类的对象:

std::vector<A> v; // will accept objects of class A

std::vector<TEST::A> v; // will accept objects of class TEST::A