C++ C++;派生类构造函数问题

C++ C++;派生类构造函数问题,c++,constructor,C++,Constructor,我的构造函数有一些问题,因为由于某些原因,目前只有基本构造函数被使用,我的多参数构造函数没有被使用。“生物”是我的抽象祖父母类,而“战斗者”是从“生物”派生的,而“地精”是从“战斗者”派生的 combatant fighter_1; combatant fighter_2; do { cout << "Please pick the first combatant, enter 1 for a Goblin, \n"; cout << "enter 2 f

我的构造函数有一些问题,因为由于某些原因,目前只有基本构造函数被使用,我的多参数构造函数没有被使用。“生物”是我的抽象祖父母类,而“战斗者”是从“生物”派生的,而“地精”是从“战斗者”派生的

combatant fighter_1;
combatant fighter_2;
do
{
    cout << "Please pick the first combatant, enter 1 for a Goblin, \n";
    cout << "enter 2 for a Barbarian, enter 3 for a Reptile person, \n" ;
    cout << "enter 4 for a Blue Men, enter 5 for a Beserker, \n";
    cout << "enter 6 for a hobbit. \n";
    cin >> pick;
    checker=pick;
        if (cin.fail()||checker!=pick||pick<1||pick>6)
        {
            cout << "You have entered an invalid input.\n";
            cin.clear();
            cin.ignore(100, '\n');
            pick=-1;
        }
}
while (checker!=pick||pick<1||pick>6); //makes sure number entered is valid
if (pick==1)
{
goblin fighter_1("Goblin",6,6,0,6,0,0,3,8);
}

通常,当
if
正文中的单个语句未执行时(正如您报告的情况),这是由于
if
条件不为
true

我从几个月前开始学习这段代码,并意识到我没有使用最新版本

fighter_1 = goblin("Goblin",6,6,0,6,0,0,3,8);

您应该为此使用指针和内存分配。最好是
std::shared_ptr
。仅供参考:
地精战斗机1(“地精”,6,6,0,6,0,0,3,8)
不会神奇地将外部范围内的
战斗机_1
变成地精。它所做的一切都是用一个隐藏外部的名字在本地构建一个,然后立即将其丢弃。战斗战斗机1的
中没有任何变化。如果你想证明If块没有执行,那么这个变量没有变化,它就不是这样的(证明)。我从几个月前开始学习这段代码,意识到我没有脱离最新版本,我应该把它命名为fighter_1=goblin(“goblin”,6,6,0,6,0,0,3,8);该赋值导致切片。
fighter_1 = goblin("Goblin",6,6,0,6,0,0,3,8);