相关疑难解决方法(0)

C++转换为派生类

我如何投射到派生类?以下方法都会出现以下错误:

无法从BaseType转换为DerivedType.没有构造函数可以采用源类型,或构造函数重载解析是不明确的.

BaseType m_baseType;

DerivedType m_derivedType = m_baseType; // gives same error

DerivedType m_derivedType = (DerivedType)m_baseType; // gives same error

DerivedType * m_derivedType = (DerivedType*) & m_baseType; // gives same error
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

45
推荐指数
3
解决办法
11万
查看次数

动态转换为派生类:一个奇怪的情况

在将C ++强制转换为派生类之后,我遇到了一些奇怪的事情。这是问题的简化:

class animal{
public:
    animal(){
        _name="animal";
    }
    virtual void makenoise(){
        cout<<_name<<endl;
    }
    T get_name(){
        return _name;
    };
protected:
    T _name;
};

class cat:public animal{
public:
    cat(){
        this->_name="cat";
    }
private:
};

class dog:public animal{
public:
    dog(){
        this->_name = "dog";
    }
};
Run Code Online (Sandbox Code Playgroud)

如果我按照以下方式进行动态投射,则可以正常工作。

vector<animal*> barnyard;
barnyard.push_back(new animal());
barnyard.push_back(new dog());
barnyard.push_back(new cat());
dog* dogptr = dynamic_cast<dog*>(barnyard[1]);
barnyard[1] = dogptr;
cout<<barnyard[1]->get_name()<<endl;
Run Code Online (Sandbox Code Playgroud)

但是可以通过以下方式进行:

 for (int ii=0;ii<3;ii++) {
        if (barnyard[ii]->get_name()=="cat"){
            auto dogptr = dynamic_cast<dog*>(barnyard[ii]);
            barnyard[ii] = dogptr;
            cout<<barnyard[ii]->get_name()<<endl;
        }
    }
Run Code Online (Sandbox Code Playgroud)

给出细分错误。任何的想法?

c++ inheritance

2
推荐指数
1
解决办法
94
查看次数

标签 统计

c++ ×2

inheritance ×2