1. ホーム
  2. c++11

[解決済み] C++コンパイラーエラー。"invalid declarator before" (無効な宣言子の前に)

2022-02-14 06:46:19

質問

以下は私のコードです。コンパイル時にエラーが発生します。

geometry' の前に無効な宣言子があります。

の16行目と48行目で、何が間違っているのかよくわかりません。アドバイスお願いします。

#include <iostream>
#include <memory>
#include <vector>
using namespace std;
class FactGeometry {   //Factory class
public:
    static std::shared_ptr<FactGeometry>geometry( int choice );
    virtual void calcArea() = 0;
};

class CalcRectangle :public FactGeometry {
    void calcArea() {
        double ll, bb, Area;
        std::cout << "\nEnter the length = ";
        std::cin >> ll;
        std::cout << "\nEnter the breadth = ";
        std::cin >> bb;
        Area = ll * bb;
        std::cout << "\nArea = " << Area;
    }
}; //end class

class CalcTraingle :public FactGeometry {
    void calcArea() {
        double bb, hh, Area;
        std::cout << "\nEnter the base = ";
        std::cin >> bb;
        std::cout << "\nEnter the height = ";
        std::cin >> hh;
        Area = 0.5 * bb * hh;
        std::cout << "\nArea = " << Area;
    }
};

FactGeometry std::shared_ptr<FactGeometry>geometry( int choice ) {
    switch ( choice ) {
    case 1: return shared_ptr<FactGeometry>( new CalcRectangle );
        break;
    case 2: return shared_ptr<FactGeometry>( new CalcTraingle );
        break;
    default: std::cout << "EXIT";
        break;
    }
} //end class

int main() {
    cout << "Hello World";
    int choice;
    std::vector<std::shared_ptr<FactGeometry>> table;
    while ( 1 ) {
        std::cout << "1. Rectangle 2. Triangle";
        std::cout << "Enter Choice :";
        std::cin >> choice;
        if ( ( choice != 1 ) || ( choice != 2 ) )
            break;
        else
            table.push_back( FactGeometry::make_shared<FactGeometry>geometry( choice ) );
    }
    for ( int i = 0; i < table.size(); i++ ) {
        table[i];
    }
    return 0;
}

ファクトリーメソッドクラスのコードを書いていますが、'geometry'の前に無効な宣言子があるとして、このエラーが発生します。

どうすればいいですか?

C++で「Invalid declarator before」と表示され、構文に問題がないにもかかわらず、同様の問題に直面している人は、前の行にセミコロンがあるかどうかをチェックしてください。