繁体   English   中英

奇怪的向量初始化问题

[英]Strange vector initialization issue

我最近调试了一个奇怪的C ++问题,其中新声明的向量以某种方式具有477218589的大小。这是上下文:

struct Triangle {
    Point3 a,b,c;
    Triangle(Point3 x, Point3 y, Point3 z) : a(x), b(y), c(z) {}
    Vector3 flat_normal() { return (a-c)^(b-c); }
};

vector<Triangle> triangles;

调用triangles.size()返回值477218589 我通过将struct Triangle更改为struct Triangle class Triangle来“解决”该问题,但我想知道为什么会有任何区别。 我应该完成typedef struct Foo { ... } Foo; 魔法? 如果是这样,为什么会有帮助?

如果有关系,我正在使用g ++-4.1。

Triangle声明为结构或类之间应该没有任何区别-在C ++中,两者之间的区别在于,成员的默认访问规范对于struct是公共的,对于类是private的,仅此而已。

除了Triangle还有其他您没有包括的内容吗?

这个

#include <vector>
#include <iostream>

struct Point3 {};

struct Triangle {
    Point3 a,b,c;
    Triangle(Point3 x, Point3 y, Point3 z) : a(x), b(y), c(z) {}
};

int main()
{
    std::vector<Triangle> triangles;

    std::cout << triangles.size() << '\n';

    return 0;
}

为我打印0 如果它也对您有用,那么问题出在此代码片段未包含的部分代码中。 如果打印出其他任何内容,则说明您的编译器/ std lib / setup有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM