向量大小不正确-我们如何初始化结构中的向量



我有以下示例代码:

#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?

dvecs既是myVec的父级,也是myVec的成员。在构造函数中,您将一个值推送到dvec1.myvec,但在A中,您读取的是v1.myvec,也就是父级的成员。您的结构中只有两个dvecs实例,并且在函数中使用不同的实例。

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

#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. 当从dvec派生新类型myVec时,它包含向量myvec,因此不需要添加新的向量
  3. 在派生类型myVec的构造函数中,我们可以直接访问基类型的myvec成员,因为它是该对象的成员

最新更新