[英]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.