我最近调试了一个奇怪的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。
答案 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就会出现问题。