踩坑记录 | C++ | struct初始化

这是一个非常悲伤的故事

众所周知,结构体struct的初始化有以下几种方式:

struct A {
    int x;
    int y;
}
//1
struct A a={1, 2};
//2
struct A b;
b.x = 1; b.y = 1;
//3.置空
struct A c;
memset(&c, 0, sizeof(c));

但是我在编程中出现了这样的一个问题:

定义了这样的 struct Pointstruct Line,分别表示平面坐标系上的点和经过某两点的直线,并编写了相关的一系列运算函数。

struct Point {
    double x;
    double y;
    double length;

    //重写运算符的代码在此省略
};

struct Line {
    Point p1, p2;
};

在VS中进行单元测试时测试了相关的几个运算函数,在此随意写出几个,如下所示。在直接运行源程序时测试调试这些输入样例都显示正确,但是在单元测试时却一直报错,计算出的点testPoint 的横纵坐标甚至为Nan.

经过反复尝试,发现是用这种方式初始化结构体导致的,当改变了初始化方式后就能通过单元测试。

//修改前
TEST_METHOD(T1)
{
    struct Line line1{1, 0, 1, 1};
    //Line line1 = Line{1, 0, 1, 1}; 也会报错
    struct Point point{0, 0};

    struct Point testpoint = getProjection(point, line1);
    struct Point realpoint = { 1, 0 };
    Assert::IsTrue(testpoint == realpoint);
}

//修改后
TEST_METHOD(T1)
{
    Line line1;
    line1.p1.x = 1; line1.p1.y = 0; line1.p2.x = 1; line1.p2.y = 1;
    Point point;
    point.x = 0; point.y = 0;
    Point testpoint = getProjection(point, line1);
    Point realpoint = { 1, 0 };
    Assert::IsTrue(testpoint == realpoint);
}

目前具体错误原因还不明,如果有类似错误的可以尝试这样修改。

原文链接: https://www.cnblogs.com/QiTang/p/12544574.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    踩坑记录 | C++ | struct初始化

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/336827

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午10:52
下一篇 2023年3月1日 下午10:52

相关推荐