我在这里有一个类的标题规范:
#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 '.'
我假设这些引用了setter函数,但我不明白为什么会引起问题。我错过了什么?
答案 0 :(得分:12)
Airframe.weight = w;
和所有类似的其他人都是非法的。 Airframe
是一个类,而不是一个对象。您可能希望将该类型的对象作为成员并设置其属性。
你可以替换
struct Airframe
{
double weight;
};
带
struct Airframe
{
double weight;
} airframe;
这会在FixedWingAircraft
中为您提供该类型的成员,您可以使用airframe
访问该成员。
答案 1 :(得分:4)
Airframe, Raid, Pilot, Engine
是struct
类型,您应该使用它们的实例/对象来访问其成员。例如:
Airframe a;
a.weight = w;