有人可以回答这个问题吗?
以下代码将比我的尴尬问题更好地突出问题。
struct vector2d
{
float x,y;
};
struct point2d
{
float x, y;
}
void drawpoint(point2d point);
int main()
{
vector2d vec = {100, 100};
drawpoint(vec);
}
void drawpoint(point2d point)
{
...
}
我想知道为什么这不起作用。另一种方法是通过中间堆point2d变量手动转换类型,但是编译器会看到这个并且知道那不是必要的吗?
这可能是我在这里错过的非常简单的事情,提前谢谢。
答案 0 :(得分:1)
编译器正在通过不转换所有类型来帮助你。假设您有一个Rectangle
班级,宽度和身高float
,以及PatientInformation
班级,身高和体重float
。如果传递错误的类型,你真的希望编译器无形地转换它吗?
请注意,以下代码可以正常工作:
int main()
{
vector2d vec = {100, 100};
drawpoint(reinterpret_cast<point2d const&>(vec));
}
但是,这里适当的解决方案是使用类型更清洁。对于传递给drawpoint
的向量,它没有 sense ,只不过将一个点传递给moveBy
是有意义的。考虑类型,而不是成员。
答案 1 :(得分:1)
point2d pnt;
memcpy(&pnt, &vec, sizeof(pnt));
drawpoint(pnt);
或
point2d pnt = { vec.x, vec.y };
drawpoint(pnt);
或
drawpoint(point2d{vec.x, vec.y});
或
drawpoint(*(const point2d*)&vec); // UB, but will work on many implementations
答案 2 :(得分:0)
你不能,你必须这样:
void main
{
vector2d vec = {100, 100};
point2d p;
p.x = vec.x;
p.y = vec.y;
Drawpoint(p);
}
答案 3 :(得分:0)
你有一堆小的语法问题,你是否尝试编译它。
Struct, Void, and Float
不应该大写
Void main
应该是 int main()
但最重要的是你已经定义了Drawpoint()来将Vector2D作为参数,并且你试图将它传递给point2d。 C ++是类型安全的,不会让你只用一种类型替换另一种类型。
答案 4 :(得分:0)
您可以创建基类:
struct XY{
float x;
float y;
};
然后
struct vector2D: XY{
};
struct point2D: XY{
};
void drawPoint(XY& xy){
}