作者:zf19920222 | 来源:互联网 | 2022-12-03 12:11
有人可以解释,为什么:
a-> b.edge = 10;
没有工作并返回错误:
错误:'class Colider'没有名为'b'的成员
是因为当我在Colider上有指针时,我不能用它指向Colider_Triange类吗?
码:
#include
#include
using namespace std;
typedef struct
{
float x;
float y;
} position;
class Colider
{
public:
unsigned int type;
};
class Colider_Triangle: public Colider
{
public:
position edge1;
position edge2;
position edge3;
};
Colider_Triangle::Colider_Triangle()
{
edge1.x = 1;
}
class Colider_Sphear: public Colider
{
public:
position pos;
unsigned int r;
};
int main(){
Colider* a;
a = new Colider_Triangle;
a->b.edge = 10;
delete(a);
return 0;
}
eerorika..
6
有人可以解释,为什么:
a->b.edge = 10;
没有工作并返回错误:
error: ‘class Colider’ has no member named ‘b’
解释很简单:
a
是指向该类型的指针Colider
.
Colider
没有成员的名字b
.
您已经编写了子表达式a->b
,只有Colider
具有名为的成员才能使用b
.
和3.有冲突.
是因为当我在Colider上有指针时,我不能用它指向Colider_Triange类吗?
不可以.您可以使用指向基类型的指针指向派生类型的对象.
delete(a);
这是另一个错误:除非声明基类的析构函数,否则通过指向基类的指针删除对象的行为是未定义的virtual
.
1> eerorika..:
有人可以解释,为什么:
a->b.edge = 10;
没有工作并返回错误:
error: ‘class Colider’ has no member named ‘b’
解释很简单:
a
是指向该类型的指针Colider
.
Colider
没有成员的名字b
.
您已经编写了子表达式a->b
,只有Colider
具有名为的成员才能使用b
.
和3.有冲突.
是因为当我在Colider上有指针时,我不能用它指向Colider_Triange类吗?
不可以.您可以使用指向基类型的指针指向派生类型的对象.
delete(a);
这是另一个错误:除非声明基类的析构函数,否则通过指向基类的指针删除对象的行为是未定义的virtual
.
我赞赏这种努力,但是回答一开始没有意义的问题有什么意义呢?将来这有谁帮助?