嗨,我是 C++ 初学者,我现在正在寻找指针的解决方案。我先写源代码,因为我的英文描述能力太差了。(谢谢你,谷歌翻译!)这是我的代码示例。
#include <iostream>
#include <vector>
using namespace std;
class UNIT
{
public :
struct OBJ
{
float x,y,z;
};
vector<OBJ> obj;
virtual void add(int x,int y,int z)=0;
virtual void size()=0;
};
class KNIGHT : public UNIT
{
public :
struct OBJ
{
float x,y,z;
};
vector<OBJ> obj;
void add(int x,int y,int z)
{
OBJ sample;
sample.x=x;
sample.y=y;
sample.z=z;
obj.push_back(sample);
}
void size()
{
cout << obj.size() << endl;
}
};
int main()
{
KNIGHT knight;
KNIGHT::OBJ sample_knight;
UNIT* pt = &knight;
pt->add(11,22,33);
knight.obj.push_back(sample_knight);
pt->size();
cout << pt->obj.size() << endl;
getchar();
return 0;
}
结果是
2
0
(如果我直接访问KNIGHT的变量,例如pt->obj[0].x,则会导致“第 932 行超出范围”)
从这个实验中,我提取了以下结果。
- UNIT* pt没有指向KNIGHT的向量 obj。
- 但是UNIT* pt可以使用KNIGHT的add()和size()。
- 可能它与UNIT和KNIGHT之间的继承有关。
此外,我尝试了 pt->obj.push_back()(在这种情况下,样本是UNIT::OBJ)并打印pt->obj.size(),它向我展示了增加的价值。但是pt->size()和以前一样。我希望它会在某个地方引起任何类型的问题,而且它是无用的,因为它与KNIGHT的add()和size()没有连接。
所以结论是这样的。
How can I get vector<OBJ> of KNIGHT(not UNIT) in directly, with UNIT* pointer or something?
※我将在角色选择功能中使用它。
例如 :
struct CHAR_LIST
{
int type,num;
};
UNIT* Select_Unit(int type)
{
switch(type)
{
case CHAR_KNIGHT :
{
return &knight;
}
case CHAR_ARCHER :
{
return &archer;
}
}
}
vector<CHAR_LIST> char_list;
UNIT* pt;
for (int num=0; num<char_list.size(); num++)
{
pt = Select_Unit(char_list[num].type);
pt->obj[char_list[num].num].x+=10;
pt->obj[char_list[num].num].y=0;
}