向量大小不正确-我们如何在结构内部初始化向量

时间:2018-11-12 14:58:23

标签: c++ c++11

我有以下示例代码:

#include <iostream>
#include <vector>

typedef struct defs
{
    std::vector<int> myvec;
} dvec;

typedef struct devdef: public dvec
{
    dvec dvec1;
    devdef()
    {
          dvec1.myvec.push_back(10);
    }
}myVec;

class A
{
public:
    A():v1()
    {
         std::cout << "my vec size is " << v1.myvec.size() << std::endl;
    }
private:
    myVec v1;
};

int main()
{
     A a1;
}

编译并执行:

$ c++ -std=c++11 try58.cpp

$ ./a.exe
my vec size is 0

我期望向量的大小为1-为什么同样为0?

2 个答案:

答案 0 :(得分:2)

您有dvecsmyVec的父母,也是myVec的成员。在构造函数中,您将值推入dvec1.myvec,但在A中,您又读了v1.myvec父级成员。您在结构中仅拥有两个dvecs实例,并且在函数中使用了不同的实例。

答案 1 :(得分:0)

我认为此版本可以满足您的需求。

#include <iostream>
#include <vector>

struct dvec
{
    std::vector<int> myvec;
}

struct myVec : public dvec
{
    myVec()
    {
          myvec.push_back(10);
    }
}

class A
{
public:
    A():v1()
    {
         std::cout << "my vec size is " << v1.myvec.size() << std::endl;
    }
private:
    myVec v1;
};

int main()
{
     A a1;
}

关于我所做更改的一些说明。

  1. 无需使用typedef来创建新类型。在C ++中,classstruct都定义了新类型。
  2. myVec派生新类型dvec时,它包含矢量myvec,因此无需添加新的类型。
  3. 在派生类型myVec的构造函数中,我们可以直接访问基本类型的myvec成员,因为它是该对象的成员。