无法从构造函数设置私有值
Unable to set private values from constructor
我有这样的代码:
#include <iostream>
#include <string>
using namespace std;
#pragma region Class Definitions
struct Vector3
{
double x;
double y;
double z;
};
class Plane {
Vector3 point, normal, p_p1, p_p2, p_p3;
public:
Plane(Vector3 p1,
Vector3 p2, Vector3 p3);
const Vector3& get_point() const;
const Vector3& get_normal() const;
double get_hnf_d() const;
Vector3 closest_point(const Vector3& p);
double distance_to(const Vector3& p);
Vector3 intersect_line(const Line &l);
};
int main()
{
a.x = 1;
a.y = 2;
a.z = 3;
b.x = -1;
b.y = 2;
b.z = -2;
s = -2;
o.x = 0;
o.y = 0;
o.z = 0;
p1.x = sqrt(1 / 8);
p1.y = sqrt(1 / 8);
p1.z = sqrt(3 / 4);
p2.x = 0;
p2.y = 2 * sqrt(1 / 8);
p2.z = 0;
p3.x = sqrt(1 / 8) + sqrt(3 / 8);
p3.y = sqrt(1 / 8) + sqrt(3 / 8);
p3.z = sqrt(3 / 4) - sqrt(1 / 4);
q1.x = 1;
q1.y = 1;
q1.z = 1;
q2.x = -1;
q2.y = -1;
q2.z = -1;
switch (choice)
{
...
Plane _plane(p1, p2, p3);
cout << "Distance to p1, p2, p3 respectievly is : " << _plane.distance_to(p1) << endl;
}
return 0;
}
Plane::Plane(Vector3 p1, Vector3 p2, Vector3 p3)
{
p_p1 = p1;
p_p2 = p2;
p_p3 = p3;
}
const Vector3 & Plane::get_point() const
{
return p_p1;
}
const Vector3 & Plane::get_normal() const
{
return normalize(p_p2);
}
double Plane::get_hnf_d() const
{
Vector3 n, numerator;
double denominator;
numerator = cross_product(substract(p_p1, p_p3), substract(p_p2, p_p3));
denominator = sqrt(pow(numerator.x, 2) + pow(numerator.y, 2) + pow(numerator.z, 2));
cout <<"read" << numerator.y << numerator.x << denominator;
n.x = numerator.x / denominator;
n.y = numerator.y / denominator;
n.z = numerator.z / denominator;
//distance from origin
return -1 * dot_product(p_p1, n);
}
Vector3 Plane::closest_point(const Vector3 & p)
{
return Vector3();
}
double Plane::distance_to(const Vector3 & p)
{
return get_hnf_d() + dot_product(p, get_normal()) ;
}
我设置的值如下:
Plane::Plane(Vector3 p1, Vector3 p2, Vector3 p3)
{
p_p1 = p1;
p_p2 = p2;
p_p3 = p3;
}
然而,每当我尝试说打印p_p1.x
时,我总是得到0返回值,从而使我的计算失败。我哪里错了?我真的是一个c++初学者。
谢谢。
你正在做整数除法:
p1.x = sqrt(1 / 8);
1/8在c++中是0
这在所有其他初始化中都是正确的。
试着写
p1.x = sqrt(1.0 / 8.0);
首先必须在main中声明p1, p2和p3,并初始化它们,然后将它们传递给plane的构造函数:
#include <iostream>
using namespace std;
#include <cmath>
struct Vector3
{
double x;
double y;
double z;
};
class Plane
{
Vector3 point, normal, p_p1, p_p2, p_p3;
public:
Plane(Vector3 p1,
Vector3 p2, Vector3 p3) : p_p1(p1), p_p2(p2), p_p3(p3){}
double distance_to(const Vector3& p)const;
};
double Plane:: distance_to(const Vector3& p)const
{
return get_hnf_d() + dot_product(p, get_normal()) ;
}
int main()
{
Vector3 p1 = {sqrt(1.0 / 8.0), sqrt(1.0 / 8.0), sqrt(3.0 / 4.0)};
// do the same thing as above
Vector3 p2, p3;
Plane _plane(p1, p2, p3);
cout << "Distance to p1 is : " << _plane.distance_to(p1) << endl;
return 0;
}
这只是一个示例而不是完整的代码
相关文章:
- 如何在构造函数中使用初始值设定项设置具有相同值的 2d 数组?
- 构造函数将所有值设置为 0
- 如何在没有复制构造函数的情况下为地图设置值?
- 类中的 Arduino 对象构造函数设置垃圾值
- 为什么我的突变器函数没有设置任何内容?还是我的构造函数?
- 无法在构造函数中执行设置元素插入
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 使用构造函数初始化结构还是在之后设置其值更好?
- 将复制构造函数设置为private和=delete有什么区别
- 我可以检查初始化列表中设置的构造函数主体中的变量吗
- 为 unordered_map 中的元素设置默认构造函数(如果是 [] 运算符)
- std::设置构造函数签名混淆
- 将复制构造函数设置为默认值在继承自 QObject 时不起作用
- 如何在 gdb 中的所有构造函数上同时为 C++ 对象设置断点?
- 未设置默认值的 c++ 构造函数
- 在构造函数中设置变量失败?
- 根据参数设置构造函数的成员数据类型
- 使用 *指针数组C++设置构造函数和析构函数
- 如何使用包含不同typedef枚举的派生类模板设置构造函数初始化列表
- 在c++中设置构造函数默认值