C++ |OOP|如何用switch case在main函数中声明类继承中的变量“a”

zbdgwd5y  于 2023-04-08  发布在  其他
关注(0)|答案(1)|浏览(157)

我正在做一个练习,选择并输入一种具有类继承的四边形,然后检查它的方法。然而,我的主函数遇到错误(错误C2065 'a':未声明的标识符。错误C2371“a”:重新定义;不同的基本类型。E0020标识符“a”未定义)。请帮助我更正

#pragma once
#include <iostream>
#include "Point.h"
#include "Quadrangle.h"
#include "Trapezoid.h"
#include "Parallelogram.h"
#include "Rectangle.h"
#include "Square.h"

using namespace std;

int main() {
    int choice = 0;

    do {
        cout << "\n----------MENU----------" << endl;
        cout << "1. Trapezoid" << endl;
        cout << "2. Parallelogram" << endl;
        cout << "3. Rectangle" << endl;
        cout << "4. Square" << endl;
        cout << "----------" << endl;
        cout << "Please choose: ";
        cin >> choice;

        switch (choice) {
        case 1:
            Trapezoid a;
            break;
        case 2:
            Parallelogram a;
            break;
        case 3:
            Rectangle a;
            break;
        case 4:
            Square a;
            break;
        default:
            cout << "Please entry again" << endl;
        }

    } while (choice < 1 || choice > 4);

    a.Set();
    a.CheckCondition();

    cout << "Perimeter = " << a.Perimeter() << endl;
    cout << "Area = " << a.Area() << endl;

    system("pause");
    return 0;
}

请帮我声明变量“a”以避免错误。

qv7cva1a

qv7cva1a1#

你在switch语句中声明了变量a,所以在这个语句之外是不知道的(这个变量是switch语句的本地变量)。为了能够在语句之后使用这个变量,你必须在进入switch语句甚至while循环之前声明它。
因为Qudrangle是一个抽象类,所以a必须是一个指针,因为Qudrangle不能被示例化!

Quadrangle* a;
do {
    ...
    switch(choice) {
    case 1:
         a = new Trapezoid();
    ...
    }

} while...

//A now accessible
cout << "Perimeter = " << a.Perimeter() << endl;

delete a;

相关问题