我想创建一个结构,比方说 Mystruct,它包含一个整数和一个 myObj 对象,其构造函数采用 2 个参数(一个字符串,另一个是 int)。我的意思是我想要:
struct Mystruct{
myObj obj();
int a;
};
现在,经过一些操作,我想创建一个 Mystruct 变量并初始化 obj 和 a。为此,我写道:
struct Mystruct* foo;
foo->a=5;
foo->obj=myObj("test",3);
这样做的好方法吗?
最佳答案
你的结构不包含一个对象,而是一个返回一个的函数:
struct Mystruct{
myObj obj(); // this is a function declaration
int a;
};
听起来像你的意思
struct Mystruct{
myObj obj;
int a;
};
然后你可以说
Mystruct foo; // default constructs obj: myObj must be default constructable
foo.a = 5;
foo.obj = myObj("test",3);
或
Mystruct foo = {myObj("test",3), 5};
请注意没有指针和动态分配:只有在确实需要并且知道自己在做什么的情况下才应使用它们。
为了完整起见,您对指针的尝试失败了,因为当您声明此指针时:
struct Mystruct* foo;
它没有指向任何有用的东西(实际上,它包含一个你可以认为是随机的内存地址,指向你不应该写的地方)。所以你不能这样做:
foo->a = 42; // Ooops, foo doesn't point to a MyStruct object yet.
在以这种方式使用它之前,您需要使 foo
指向一个 MyStruct
对象。
关于c++结构包含对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798864/