我有以下示例代码:
#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?
答案 0 :(得分:2)
您有dvecs
是myVec
的父母,也是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;
}
关于我所做更改的一些说明。
typedef
来创建新类型。在C ++中,class
和struct
都定义了新类型。myVec
派生新类型dvec
时,它包含矢量myvec
,因此无需添加新的类型。myVec
的构造函数中,我们可以直接访问基本类型的myvec
成员,因为它是该对象的成员。