0

ここにクラスのヘッダー仕様があります:

#ifndef FIXEDWINGAIRCRAFT_H
#define FIXEDWINGAIRCRAFT_H

#include <iostream>

class FixedWingAircraft
{
  private:
    struct Airframe
    {
        double weight;
    };
    struct Engine
    {
        double weight;
    double fuel;
    };
    struct Radio
    {
        bool state;
    double weight;
    };
    struct Pilot
    {
        int proficiency;
    double weight;
    };
    public:
    void setAirframe(double w)
    {
        Airframe.weight = w;
    }
    void setEngine(double w, double f)
    {
        Engine.weight = w;
    Engine.fuel = f;
    }
    void setRadio(bool s, double w)
    {
        Radio.state = s;
    Radio.weight = w;
    }
    void setPilot(int p, double w)
    {
        Pilot.proficiency = p;
    Pilot.weight = w;
    }
};
#endif

しかし、コンパイルしようとすると、次のような構文エラーが大量に発生します。

error C2143: syntax error : missing ';' before '.'

これらはセッター関数を参照していると思いますが、なぜそれが問題を引き起こすのかわかりません。私は何が欠けていますか?

4

2 に答える 2

12

Airframe.weight = w;他の同様のものはすべて違法です。Airframeオブジェクトではなくクラスです。おそらく、そのタイプのオブジェクトをメンバーとして持ち、そのプロパティを設定しようとしているでしょう。

あなたは置き換えることができます

struct Airframe
{
    double weight;
};

struct Airframe
{
    double weight;
} airframe;

FixedWingAircraftこれにより、でアクセスできるそのタイプのメンバーが得られますairframe

于 2013-05-23T20:27:10.430 に答える
4

Airframe, Raid, Pilot, Engineタイプのstruct場合、それらのインスタンス/オブジェクトを使用してメンバーにアクセスする必要があります。例えば:

Airframe a;
a.weight  = w;
于 2013-05-23T20:28:14.420 に答える