奇怪的矢量初始化问题

时间:2010-02-19 07:15:47

标签: c++ vector struct

我最近调试了一个奇怪的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更改为class Triangle来解决问题,但我想知道为什么会有任何区别。我应该做那typedef struct Foo { ... } Foo;魔法吗?如果是这样,为什么会有帮助?

如果重要,我正在使用g ++ - 4.1。

2 个答案:

答案 0 :(得分:1)

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

Triangle还有什么不包含的内容吗?

答案 1 :(得分:1)

#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就会出现问题。