这是我的示例程序
#include "stdafx.h"
class B
{
public:
int i,j;
};
class A
{
public:
B b[2];
A()
{
b[0].i = 1;
b[0].j = 2;
b[1].i = 3;
b[1].j = 4;
}
B* function()
{
return b;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
B* obj = new B();
obj = a.function();
return 0;
}
我必须得到b个对象的数组(即需要所有值,b [0] .i,b [0] .j,b [1] .i和b [1] .j)
但是当我尝试使用此代码时,只返回一个对象。
答案 0 :(得分:1)
你在问题中陈述的不是真的。确实返回了两个对象。使用obj[0]
和obj[1]
访问它们。
我猜你在调试器下面看obj
,IDE无法知道你的指针obj
是两个对象的数组。因此,工具提示只会显示第一个对象obj[0]
或*obj
。但另一个对象obj[1]
肯定存在。
在调用a.function
后添加以下行:
printf("%d, %d, %d, %d\n", obj[0].i, obj[0].j, obj[1].i, obj[1].j);
你会看到这个输出:
1, 2, 3, 4
请注意,B* obj = new B();
行没有任何意义,因为您会立即覆盖obj
。你应该这样做:
B* obj = a.function();
您的代码也有点危险,因为您必须至少保持a
活着,只要您引用obj
。
答案 1 :(得分:1)
此代码
B* function()
{
return b;
}
返回指向数组
的第一个元素的指针B b[2];
可以使用指针算术和/或运算符[]来取消引用。
答案 2 :(得分:1)
是的,你实际上正在返回一个指向数组b [2]的指针。你现在要做的是迭代该指针中的项目。您可以通过在代码中添加以下行来打印它们:
A a;
B *obj = a.function();
std::cout << obj[0].i << ", " << obj[0].j << "; " << obj[1].i << ", " << obj[1].j << std::endl;
当然,包括文件开头的iostream:
#include <iostream>