C++ 如何正确地用c++;

C++ 如何正确地用c++;,c++,C++,所以,让我从头开始。 这是我的最小可复制示例 此处的所有代码: #include <stdio.h> #include "glm/glm.hpp" class Vector3 : public glm::vec3 { public: Vector3(): glm::vec3(0.0f, 0.0f, 0.0f) { }; Vector3(float _x, float _y, float _z) : glm::vec

所以,让我从头开始。 这是我的最小可复制示例

此处的所有代码:

#include <stdio.h>
#include "glm/glm.hpp"

class Vector3 : public glm::vec3
{
public:
        Vector3(): glm::vec3(0.0f, 0.0f, 0.0f)
        {

        };

        Vector3(float _x, float _y, float _z) : glm::vec3(_x, _y, _z) 
        {

        };
};

int main(int args, char* argv[])
{
        Vector3 pos1 = Vector3( 0.0f, 0.0f, 0.0f);
        Vector3 pos2 = Vector3(10.0f, 1.0f, 0.6f);

        float dist = glm::distance(pos1,pos2);

        printf("distance : %.3f\n" , dist);

        return 0;
}
为什么它试图转换为浮点而不是glm::vec3

我的目标只是能够像使用glm::vec3一样使用Vector3类,但对于某些方法,我会添加到其中

目前,仅当我显式强制转换为glm::vec3时,它才会编译:

float dist = glm::distance((glm::vec3)pos1,(glm::vec3)pos2);

我的问题是:我怎样才能摆脱这种明显的演员阵容


我读了一些关于隐式转换的书,这似乎是我所需要的,但我现在没能让它起作用。

Arff,我的问题完全被误导了

我尝试从一个简单的自定义类而不是glm::vec3继承,并提供了自己的距离函数, 它的工作原理与预期一致

查看glm::vec3的代码(我以前应该读过…)glm使用了一个非常复杂的模板系统,我不理解

这并没有回答上面的问题,但它为我澄清了很多问题

我仍然不明白为什么不能以同样的方式继承glm::vec3。
这就是我应该写的问题标题。

看起来你的
Vector3::Vector3
初始值设定项列表使用了3个未定义的变量
x,y,z
-你到底想在这里做什么?是的,这很愚蠢(我在试图让它工作时就是这么做的)我在使用glm::vec3()时有完全相同的行为如果没有参数,您应该在初始化器列表中使用
glm::vec3(x,y,z)
glm::vec3()
不会在构造函数中使用x、y、z参数,除非您在构造函数体中手动分配它们(这是不必要的)。此外,您可以在类上实现运算符,以避免编写显式强制转换。@Romen派生类应自动隐式转换为基类。我完全不明白为什么在这种情况下必须进行铸造。嗯,好吧,所以我的问题在于其他地方。我编辑了我的问题,并显示了当我没有显式强制转换时收到的错误消息。感谢您提供有关“隐式转换”的信息,这是一个非常复杂的页面;),有很多东西要学!
float dist = glm::distance((glm::vec3)pos1,(glm::vec3)pos2);