1


0

pClass1 =(Class1 *)pBase→ next(Class1 *)キャストなし

クラスBase \ {Base * next; }

class Class1 : Base
{
}

Base* pBase = new Base();
Class1* pTest = new Class1();
pBase->next = pTest;

Class1* pClass1;
pClass1 = (Class1*)pBase->next;

書きたい

pClass1 = pBase->next;

コンパイルエラーC2440を取得しません(変換できません)。 または言い換えれば、pClass1がpBase→ nextが指すクラスを指すようにします。

いくつかの演算子のオーバーロードで可能ですか? どうやってするの?

3 Answer


2


template
class Base
{
   T* next;
}

class Class1 : Base
{
}

Class1* pTest1 = new Class1();
Class1* pTest2 = new Class1();
pTest1->next = pTest2;

Class1* pClass1;
pClass1 = pTest1->next;


1


-開発時に-nextがClass1のインスタンスを指していることが確実な場合、nextをBaseポインターではなくClass1ポインターにします。

確信が持てず、コンパイル時にしかわからない場合は、動的キャストを使用する必要があります(おそらくnextは後でClass2インスタンスを指します)。


1


あなたが望んでいるものに最も近いものはこれです:

class Class1;

class Base
{
public:
    Base* next;

    operator Class1*()
    {
        return (Class1*)this;
    }
};

class Class1 : public Base
{
};

and:

Base* pBase = new Base();
Class1* pTest = new Class1();
pBase->next     = pTest;

Class1* pClass1;
pClass1 = *pBase->next;

しかし、これは実際にC ++をいじくり回しているので、後で非常に費用がかかります。 パトリックが言及したキャストのいずれかを使用してください。