假設我有兩個類,一個和兩個。一和二基本相同,但兩個可以轉換成一個。指針轉換,無法將兩個*轉換爲一個*
#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
兩個有權訪問One,但One無權訪問Two。在main.cpp中我有:
One a(4.5f, 5.5f);
Two b(10.5, 7.5);
One * c = &b;
我得到一個錯誤,如果我嘗試做一個指針的一個地址爲二。錯誤是「錯誤C2440:'初始化':不能從'兩*'轉換爲'一*'」
我不能爲我的生活弄清楚如何做到這一點,如果它甚至可能。任何幫助,將不勝感激。
編輯:添加一個新行到Two.h與operator One&() const { return *this; }
。我試圖用它來得到這個轉換操作符的工作職能是void TestRefConstPrint(const One &testClass);
低於主,這樣就出現了「新的錯誤不能由兩個轉換參數1」到‘常量一個&’。
在main我做:
int main()
{
Two b(10.5, 7.5);
TestRefConstPrint(b);
return 0;
}
那麼有什麼辦法讓它變成一個帶有操作符轉換的自動函數嗎?所以當我這樣做時,它會自動執行reinterpret_cast? – jamby
@jamby:不,我強烈建議您進行值轉換('One c = b'),而不是使用第一個轉換運算符。 – HighCommander4
@jamby:我想你可以從'One'中派生'Two'(並且除掉'Two'的數據成員)。然後'Two *'會隱式轉換爲'One *'。不知道更多背景,這很難說是否合適,儘管我的直覺認爲不是。 – HighCommander4