Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的向量初始化问题 我最近调试了一个奇怪的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; struct三角形{ 第3点a、b、c; 三角形(点3x,点3y,点3z):a(x),b(y),c(z){} 向量3平坦_正规(){返回(a-c)^(b-c);} }; 矢量三角形;_C++_Vector_Struct - Fatal编程技术网

奇怪的向量初始化问题 我最近调试了一个奇怪的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; struct三角形{ 第3点a、b、c; 三角形(点3x,点3y,点3z):a(x),b(y),c(z){} 向量3平坦_正规(){返回(a-c)^(b-c);} }; 矢量三角形;

奇怪的向量初始化问题 我最近调试了一个奇怪的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; struct三角形{ 第3点a、b、c; 三角形(点3x,点3y,点3z):a(x),b(y),c(z){} 向量3平坦_正规(){返回(a-c)^(b-c);} }; 矢量三角形;,c++,vector,struct,C++,Vector,Struct,调用triangles.size()返回值477218589。 我通过将struct Triangle更改为class Triangle来“修复”这个问题,但我想知道为什么会有任何不同。我是否应该这样做typedef struct Foo{…}Foo魔法?如果是这样,为什么会有帮助 如果我有问题,我使用G++—4.1。< /P> < P>在C++中,将三角形< /> >作为结构或类——不应该有任何区别,两者之间的区别是成员的默认访问规范对于结构和私有类是公开的,但就是这样。 关于三角形,还有什么

调用
triangles.size()
返回值
477218589
。 我通过将
struct Triangle
更改为
class Triangle
来“修复”这个问题,但我想知道为什么会有任何不同。我是否应该这样做
typedef struct Foo{…}Foo魔法?如果是这样,为什么会有帮助


如果我有问题,我使用G++—4.1。< /P> < P>在C++中,将<代码>三角形< /> >作为结构或类——不应该有任何区别,两者之间的区别是成员的默认访问规范对于结构和私有类是公开的,但就是这样。 关于三角形,还有什么你没有包括的吗?

#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;
}
#包括
#包括
结构点3{};
结构三角形{
第3点a、b、c;
三角形(点3x,点3y,点3z):a(x),b(y),c(z){}
};
int main()
{
向量三角形;

std::cout我也不认为有什么区别!我已经添加了
三角形
点3
向量3
的全部内容都是简单的类。好吧,这里有一个补充:除非它提供了默认构造函数,否则不能使用带有
std::vector
的类型。(我的编译器没有检测到这一点,因为代码段从未尝试填充向量。)由于
Triangle
不提供默认构造函数,从技术上讲,它可能会调用未定义的行为。只有在调用方法并希望使用默认值时,才需要默认构造函数。
vec.resize(10)
-需要默认构造函数,否则它将无法编译,
vec.resize(10,Something(x,y));
-不需要默认构造函数。@UncleBens:谢谢您的澄清!您所描述的可以安全地称为“不太可能”原因不止一个。显然,您没有发布整个代码。而且,将
struct
更改为
class
除了会导致重新编译翻译单元外,不会解决问题(如果有)。如果要在调试过程中可靠地监视变量,则必须关闭优化。如果是程序本身输出了错误的值,请发布一个显示该行为的最小可编译代码段。嗯,我无法在其他地方重现该错误,因此显然它不存在!:-P无论如何,谢谢。