C++ C++;访问继承类中的运算符函数

C++ C++;访问继承类中的运算符函数,c++,inheritance,eigen,C++,Inheritance,Eigen,我目前正在编写一个应用程序,其中我使用Egeng库进行复杂的3D数学。因为我需要不同的点和向量类,所以我的point3d类如下所示: class point3d : public Eigen::Vector4d { public: point3d(){} point3d(double x, double y, double z) : Eigen::Vector4d(x, y, z, 1) {} void fromString(std::string input); };

我目前正在编写一个应用程序,其中我使用Egeng库进行复杂的3D数学。因为我需要不同的点和向量类,所以我的point3d类如下所示:

class point3d : public Eigen::Vector4d
{
public:
    point3d(){}
    point3d(double x, double y, double z) : Eigen::Vector4d(x, y, z, 1) {}
    void fromString(std::string input);
};
v 2.8 0.52 10.18
现在我想创建这个类的一个成员函数,它允许我解析如下所示的OBJ文件行:

class point3d : public Eigen::Vector4d
{
public:
    point3d(){}
    point3d(double x, double y, double z) : Eigen::Vector4d(x, y, z, 1) {}
    void fromString(std::string input);
};
v 2.8 0.52 10.18
就这一点而言。这就是我打算如何设计我的解析函数

void point3d::fromString(std::string input)
{
    char* buf = strdup(input.c_str());
    if (strtok(buf, " ") == "v")
    {

        ;
        strtok(buf, " ");
        this-x = std::stod(strtok(buf, " "));
        this->y = std::stod(strtok(buf, " "));
        this->z = std::stod(strtok(buf, " "));  

    }
}
我的问题是,Eigen不允许我访问存储在Vector4d中的数据,如this->x、this-y、this->z等等。相反,你通常会以矢量4D v的形式访问它;v[0]、v[1]、v[2]等等。我认为它这样做的方式是使用

double Eigen::Vector4d::operator[](unsigned int index){...}
功能

我不知道如何在派生类中访问这些数据。我必须做什么才能访问该函数中的数据,以便写入x、y、z值

你能行

(*this)[0]
依此类推,以便调用基类
操作符[]

您可以执行以下操作

(*this)[0]

等等,以便调用基类
操作符[]
x
y
z
不是
特征::向量4d
的成员变量,而是方法。您可以使用
this->x()
etc(或
Vector4d::x()
)从派生类访问它们。同样有效的是
(*this)[0]
(*this)(0)
。如果您需要在类中经常访问
x()
y()
z()
,您可以编写一次:

using Vector4d::x;
using Vector4d::y;
using Vector4d::z;

然后使用
x()
y()
z()
访问它们。但是,这可能会导致一些隐藏冲突(如果以相同的方式命名局部变量)。

x
y
z
不是
特征::Vector4d
的成员变量,而是方法。您可以使用
this->x()
etc(或
Vector4d::x()
)从派生类访问它们。同样有效的是
(*this)[0]
(*this)(0)
。如果您需要在类中经常访问
x()
y()
z()
,您可以编写一次:

using Vector4d::x;
using Vector4d::y;
using Vector4d::z;

然后使用
x()
y()
z()
访问它们。但是,这可能会导致一些阴影冲突(如果您以相同的方式命名局部变量)。

Ahh,我明白了。如果一个人懒得在使用导入的库之前检查它,就会发生这种情况。谢谢你的回答。啊,我明白了。如果一个人懒得在使用导入的库之前检查它,就会发生这种情况。谢谢你的回答。