C++ 在全局结构中引用对象

C++ 在全局结构中引用对象,c++,C++,我有一个简单的矩阵和向量类: class Matrix { public: Matrix(unsigned nrows = 1, unsigned ncols = 1); virtual ~Matrix() {} //operators virtual float& operator() (unsigned row, unsigned col); virtual float operator() (unsigned row, unsigne

我有一个简单的矩阵和向量类:

class Matrix
{
public:
    Matrix(unsigned nrows = 1, unsigned ncols = 1);
    virtual ~Matrix() {} 

    //operators
    virtual float& operator() (unsigned row, unsigned col); 
    virtual float  operator() (unsigned row, unsigned col) const;

    ... other stuff ...

protected:
    unsigned mRows;
    unsigned mCols;
    vector<float> MatrixData;
};    

// vector class and methods ( n x 1 matrix)
class VectorM: public Matrix
{
public:
    VectorM(unsigned nRows = 1);
    virtual ~VectorM(){} // Destructor

    //operators
    float& operator() (unsigned row); 
    float  operator() (unsigned row) const;
};
并由实例化和引用(我知道该函数不是必需的,但我与现有代码保持一致)

使用结构的函数有

void StepInnerLoop()
{
    ... stuff ...
    float bodyError[3];
    tRTT *RTT = GetRTTPointer();

    // these appear to be fine
RTT->dQuat(1) = desQuat[0]; RTT->aQuat(1) = attitudeQuat[0];
RTT->dQuat(2) = desQuat[1]; RTT->aQuat(2) = attitudeQuat[1];
RTT->dQuat(3) = desQuat[2]; RTT->aQuat(3) = attitudeQuat[2];
RTT->dQuat(4) = desQuat[3]; RTT->aQuat(4) = attitudeQuat[3];

ResolvedTiltTwist(RTT);

bodyError[0] = RTT->attErr(1); // ERROR #1 HERE
bodyError[1] = RTT->attErr(2);
bodyError[2] = RTT->attErr(3);   

... other stuff ...
}

void ResolvedTiltTwist(tRTT *RTT)
{
    float thetaTilt, thetaSign;

    Quat2DirectionCosine(RTT->Rvb_hat,RTT->aQuat); //ERROR #2 HERE
    RTT->ex_hat(1) = RTT->Rvb_hat(1,1); 
    RTT->ex_hat(2) = RTT->Rvb_hat(1,2); 
    RTT->ex_hat(3) = RTT->Rvb_hat(1,3); 

    ...stuff...
}

void Quat2DirectionCosine(Matrix& dc, const VectorM& e)
{
   ... stuff ...
}
我得到两个错误-错误#1是没有合适的从“VectorM”到“float”的转换函数存在,错误#2是指向绑定函数的指针,只能用于调用该函数

如果所有对象都在StepInnerLoop或ResolvedTiltTwist函数中声明,则一切正常。有什么想法吗


提前谢谢。

局部变量非常便宜。您有一个
attErr
成员还是三个?语法看起来像是声明一个变量,但将其初始化为3。[OT]:我不会使用继承,因为您不重写任何方法(
operator()
未被重写,而是重载和隐藏)。我会使用组合变量,但当它们分配内存时,使用组合变量是便宜的,这是通过使用
std::vector
存储矩阵数据来实现的@Thomasmatthew在构造对象时给出的参数是向量中元素的数量或矩阵的大小,因此只有一个
attErr
,它有三个元素@Jarod42我不想使用继承,因为向量是一个矩阵,其中mCols总是=1?
tRTT gRTT;
tRTT *GetRTTPointer(void)
{
    return(&gRTT);
}
void StepInnerLoop()
{
    ... stuff ...
    float bodyError[3];
    tRTT *RTT = GetRTTPointer();

    // these appear to be fine
RTT->dQuat(1) = desQuat[0]; RTT->aQuat(1) = attitudeQuat[0];
RTT->dQuat(2) = desQuat[1]; RTT->aQuat(2) = attitudeQuat[1];
RTT->dQuat(3) = desQuat[2]; RTT->aQuat(3) = attitudeQuat[2];
RTT->dQuat(4) = desQuat[3]; RTT->aQuat(4) = attitudeQuat[3];

ResolvedTiltTwist(RTT);

bodyError[0] = RTT->attErr(1); // ERROR #1 HERE
bodyError[1] = RTT->attErr(2);
bodyError[2] = RTT->attErr(3);   

... other stuff ...
}

void ResolvedTiltTwist(tRTT *RTT)
{
    float thetaTilt, thetaSign;

    Quat2DirectionCosine(RTT->Rvb_hat,RTT->aQuat); //ERROR #2 HERE
    RTT->ex_hat(1) = RTT->Rvb_hat(1,1); 
    RTT->ex_hat(2) = RTT->Rvb_hat(1,2); 
    RTT->ex_hat(3) = RTT->Rvb_hat(1,3); 

    ...stuff...
}

void Quat2DirectionCosine(Matrix& dc, const VectorM& e)
{
   ... stuff ...
}