if 定义类A的对象duixiang else 定义类B的对象duixiang 异常

if 定义类A的对象duixiang else 定义类B的对象duixiang 错误
#include <iostream>
using namespace std;
class A
{
public:
void print(){cout<<"类A\n";}
};
class B
{
void print(){cout<<"类B\n";}
};
int main()
{
char choice;
cin>>choice;
if (choice=='a')
A duixiang;
else
B duixiang;
duixiang.print(); //为什么会错呢
return 0;
}

------解决方案--------------------
C/C++ code
if (choice=='a')
    A duixiang;//这样定义只是在if else中才会有效。。。作用域就只是在if else中
else
    B duixiang;

------解决方案--------------------
C/C++ code
#include <iostream>
using namespace std;
class A
{
public:
    void print(){cout<<"类A\n";}
};
class B
{
public://这个必须加,print才能在主函数中调用,否则默认的是private
    void print(){cout<<"类B\n";}
};
int main()
{
    char choice;
    cin>>choice;
    if (choice=='a')
    {
        A duixiang;
        duixiang.print(); //这样就好了
    }
    else
    {
        B duixiang;
        duixiang.print(); 
    }
    return 0;
}

------解决方案--------------------
因为你是在 if...else... 语句里才声明的“duixiang”,出了if...else...语句就出了这个变量的作用域了

C/C++ code

#include <iostream>
using namespace std;

class BaseAB
{
public:
    virtual void print() = 0;
};

class A : public BaseAB
{
public:
    void print(){cout<<"ÀàA\n";}
};

class B : public BaseAB
{
    void print(){cout<<"ÀàB\n";}
};

int main()
{
    char choice;
    cin>>choice;

    BaseAB* p_duixiang;

    if (choice=='a')
    {
        A duixiang;
        p_duixiang = &duixiang;
    }
    else
    {
        B duixiang;
        p_duixiang = &duixiang;
    }

    p_duixiang->print();

    return 0;
}