小编Bar*_*lin的帖子

静态C++映射初始化错误C2552:无法使用初始化列表初始化非聚合

我正在尝试使用以下代码初始化标题中的地图,但它一直给我标题中的错误.我正在使用C++ 11,所以这应该是可能的,对吧?

typedef std::map<NPCAnimation::ID, std::map<Direction::ID, sf::Time>> AnimationSpeedMap;
AnimationSpeedMap AnimationSpeeds = {
    {NPCAnimation::WALK, {
            {Direction::LEFT, sf::milliseconds(100)},
            {Direction::RIGHT, sf::milliseconds(100)},
            {Direction::UP, sf::milliseconds(200)},
            {Direction::DOWN, sf::milliseconds(200)}
        }
    },

    {NPCAnimation::IDLE, {
            {Direction::LEFT, sf::milliseconds(600)},
            {Direction::RIGHT, sf::milliseconds(600)},
            {Direction::UP, sf::milliseconds(600)},
            {Direction::DOWN, sf::milliseconds(600)}
        }
    },

    {NPCAnimation::SPECIAL, {
            {Direction::LEFT, sf::milliseconds(500)},
            {Direction::RIGHT, sf::milliseconds(500)},
            {Direction::UP, sf::milliseconds(500)},
            {Direction::DOWN, sf::milliseconds(500)}
        }
    },
};
Run Code Online (Sandbox Code Playgroud)

提前致谢!~grambler1

c++ initialization map

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

通过强制转换来覆盖重写方法

我有一个从A公开继承的B级:

class A {
    private:
    virtual void method();
}

class B : public A {
    private:
    void method();
}
Run Code Online (Sandbox Code Playgroud)

现在,我需要以某种方式调用原来的A::method()B::method(),而无需调用为A的拷贝构造函数
在图书馆,我想扩展定义A,所以我不能改变这个代码(使法保护的例子).是否有可能以某种方式将thisptr 投射B::method()到被覆盖的内部并切掉method

我正在使用一个调用的外部接口A::method().这个接口正确调用我的重写B::method(),但我似乎无法使接口调用内部B::method()不生成堆栈溢出.

c++ virtual casting base derived-class

5
推荐指数
1
解决办法
116
查看次数

标签 统计

c++ ×2

base ×1

casting ×1

derived-class ×1

initialization ×1

map ×1

virtual ×1