假设我有两个班级,一和二。一和二本质上是一样的,但是二可以转换成一。
#ifndef _ONE_H_
#define _ONE_H_
class One
{
private:
float m_x;
float m_y;
public:
One();
One(float x, float y);
};
#endif
#ifndef _TWO_H_
#define _TWO_H_
#include "One.h"
class Two
{
private:
float m_x;
float m_y;
public:
Two();
Two(float x, float y);
operator One() { return One(m_x, m_y); }
operator One* () { return &One(m_x, m_y); }
operator One& () const { return *this; }
float GetX(void) { return m_x ;}
float GetY(void) { return m_y ;}
void Print();
};
#endif
二可以访问一,但一无权访问二。在 main.cpp 我有:
One a(4.5f, 5.5f);
Two b(10.5, 7.5);
One * c = &b;
如果我尝试将 One 的指针指向 Two 的地址,则会出现错误。错误是“错误 C2440:'正在初始化':无法从 '两个 *' 转换为 '一个 *'”
如果可能的话,我终其一生都无法弄清楚如何做到这一点。任何帮助,将不胜感激。
编辑:在 Two.h 中添加了一个新行,带有operator One& () const { return *this; }
. 我试图用来让这个转换运算符工作的函数是void TestRefConstPrint(const One &testClass);
下面的 main,这会出现一个新错误,即“无法将参数 1 从二”转换为“常量一 &”。
我在里面做:
int main()
{
Two b(10.5, 7.5);
TestRefConstPrint(b);
return 0;
}