簡體   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