Lesson_8 作业_1 -- car和truck

本文详细介绍了如何使用面向对象编程创建交通工具基类及其子类,包括小汽车和卡车的具体实现。通过定义通用属性如品牌和颜色,以及特定属性如座位数和载重,展示了类的继承和多态性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.作业描述

  定义一个名为Vehicles(交通工具)的基类,该类中应包含String类型的成员属性brand(商标)和color(颜色),还应包含成员方法run(行驶,在控制台显示“我已经开动了”)和showInfo(显示信息,在控制台显示商标和颜色),并编写构造方法初始化其成员属性。

  编写Car(小汽车)类继承于Vehicles类,增加int型成员属性seats(座位),还应增加成员方法showCar(在控制台显示小汽车的信息),并编写构造方法。

  编写Truck(卡车)类继承于Vehicles类,增加float型成员属性load(载重),还应增加成员方法showTruck(在控制台显示卡车的信息),并编写构造方法。

main方法中测试以上各类。

二.代码

 

  1 /************************************************************
  2 *                    Lesson_8 作业_1 -- car和truck
  3 *                         2013-01-18
  4 *                        by CocoonFan
  5 *
  6 *************************************************************
  7 *************************作业描述****************************
  8 *
  9 *    定义一个名为Vehicles(交通工具)的基类,该类中应包含String
 10 * 类型的成员属性brand(商标)和color(颜色),还应包含成员方法
 11 * run(行驶,在控制台显示“我已经开动了”)和showInfo(显示信息,
 12 * 在控制台显示商标和颜色),并编写构造方法初始化其成员属性。
 13 *    编写Car(小汽车)类继承于Vehicles类,增加int型成员属性
 14 * seats(座位),还应增加成员方法showCar(在控制台显示小汽车的
 15 * 信息),并编写构造方法。
 16 *    编写Truck(卡车)类继承于Vehicles类,增加float型成员属性
 17 * load(载重),还应增加成员方法showTruck(在控制台显示卡车的
 18 * 信息),并编写构造方法。
 19 *    在main方法中测试以上各类。
 20 *************************************************************/
 21 public class TestVehicles {
 22     public static void main(String[] args) {
 23         Car car = new Car("宝马", "红色", 6);
 24         Truck truck = new Truck("福田", "蓝色", 7.5f);
 25         car.run();
 26         car.showCar();
 27         truck.showTruck();
 28     }
 29 }
 30 
 31 class Vehicles{
 32     private String brand;
 33     private String color;
 34     
 35     public Vehicles(String brand, String color){
 36         this.brand = brand;
 37         this.color = color;
 38     }
 39     
 40     public String getBrand() {
 41         return brand;
 42     }
 43     public void setBrand(String brand) {
 44         this.brand = brand;
 45     }
 46     public String getColor() {
 47         return color;
 48     }
 49     public void setColorString(String color) {
 50         this.color = color;
 51     }
 52     
 53     public void run(){
 54         System.out.println("我已经开动了");
 55     }
 56     
 57     public void showInfo(){
 58         System.out.println("车的商标是:" + brand);
 59         System.out.println("车的颜色是:" + color);
 60     }    
 61 }
 62 
 63 class Car extends Vehicles{
 64     int seats;
 65     
 66     public Car(String brand, String color, int seats){
 67         super(brand, color);
 68         this.seats = seats;
 69     }
 70 
 71     public int getSeats() {
 72         return seats;
 73     }
 74 
 75     public void setSeats(int seats) {
 76         this.seats = seats;
 77     }
 78     
 79     public void showCar(){
 80         super.showInfo();
 81         System.out.println("座位数量是:" + this.seats);
 82         System.out.println();
 83     }
 84 }
 85 
 86 class Truck extends Vehicles{
 87     float load;
 88     
 89     public Truck(String brand, String color, float load){
 90         super(brand, color);
 91         this.load = load;
 92     }
 93 
 94     public float getLoad() {
 95         return load;
 96     }
 97     public void setLoad(float load) {
 98         this.load = load;
 99     }
100 
101 
102 
103     public void showTruck(){
104         super.showInfo();
105         System.out.println("车的载重量是:" + this.load + "t");
106         System.out.println();
107     }
108 }

 

三.运行结果

 

转载于:https://www.cnblogs.com/CocoonFan/archive/2013/01/18/2867133.html

<think>嗯,用户遇到了交叉编译错误,'sin''cos'未声明。首先,我需要回忆一下C++中数学函数的使用。通常,使用这些函数需要包含头文件<cmath>,对吗?可能用户没有包含这个头文件,导致编译器找不到sincos的声明。 然后,查看错误出现的行数,是5960行,调用sincos的地方。用户可能直接用了sin(_psi_trail),但如果没有包含cmath,或者没有使用std命名空间,就会报错。因为在C++中,这些函数位于std命名空间里,或者需要包含正确的头文件。 另外,交叉编译环境可能本地环境不同,可能标准库的配置有问题,或者编译器设置有问题,比如没有链接数学库。不过通常C++标准库不需要显式链接,但有时候需要加上-lm。不过这个错误更可能头文件有关。 可能的解决方案是检查代码是否包含#include <cmath>,并且在调用sincos时使用std::前缀,或者使用using namespace std;。但最好推荐显式使用std::作用域,避免全局命名空间污染。 用户可能在安霸平台上进行交叉编译,可能使用的工具链是否有特殊要求?比如是否需要特定的编译器标志或者链接选项?不过错误提示是作用域内未声明,所以更可能是头文件或命名空间的问题。 再考虑代码中的变量型,_psi_trail是否是浮点型?如果参数型不正确,也可能导致问题,但通常编译器会给出型转换错误而不是未声明。所以优先考虑头文件命名空间的问题。 总结可能的解决步骤:首先检查是否包含<cmath>头文件,然后检查是否使用了std::sinstd::cos,或者是否有using namespace std;。如果没有包含头文件,添加#include <cmath>;如果头文件已包含,但未加std::,则加上。如果这些都正确,可能需要检查交叉编译工具链是否支持C++标准库中的数学函数,或者是否有其他配置问题。 另外,Makefile中的编译选项是否正确?是否在编译时链接了数学库?有时候需要添加-lm参数,尤其是在C语言中。但C++一般会自动链接,不过交叉编译环境可能不同,可能需要显式链接。所以用户也可以尝试在Makefile的链接阶段添加-lm。 但根据错误信息,是编译阶段的错误,而不是链接错误,所以更可能是头文件的问题。所以首先处理头文件命名空间的问题,如果问题依旧存在,再考虑链接选项。</think>在安霸平台交叉编译过程中出现'sin''cos'未声明的错误,可通过以下步骤排查解决: --- ### 一、问题原因分析 1. **缺少数学库头文件** C/C++标准数学函数(如$sin$, $cos$, $sqrt$等)需要包含头文件`<cmath>`(C++)或`<math.h>`(C)。 2. **未声明命名空间** 在C++中,如果未使用`using namespace std;`或未显式调用`std::sin`,编译器将无法识别标准库函数。 --- ### 二、解决方案步骤 #### 1. 添加头文件引用 在`src/logical_adapter_truck_rear.cpp`文件顶部添加: ```cpp #include <cmath> // 确保包含数学函数声明 ``` #### 2. 显式指定命名空间 修改代码中的`sin``cos`调用方式: ```cpp // 原代码 _rear_wheel._x = m_vehicle_info._trailer_len * sin(_psi_trail) * (-1) - ...; _rear_wheel._y = m_vehicle_info._trailer_len * cos(_psi_trail); // 修改为(任选其一) // 方案一:添加 std:: 前缀 _rear_wheel._x = ... * std::sin(_psi_trail) * ...; _rear_wheel._y = ... * std::cos(_psi_trail); // 方案二:在文件顶部添加 using 声明 using std::sin; using std::cos; ``` #### 3. 检查编译器参数 在Makefile中确认是否链接数学库`-lm`(一般C++会自动链接,但交叉编译环境可能需要手动添加): ```makefile # 在LDFLAGS或LIBS变量中添加 LDFLAGS += -lm ``` --- ### 三、验证流程 1. **执行清理编译** 修改后运行`make clean`清除旧对象文件,再重新编译。 2. **交叉编译器兼容性** 确认交叉编译器是否完整支持C++标准库,可通过`<cmath>`头文件路径是否存在进行验证。 --- ### 四、补充说明 - 如果涉及自定义数学函数实现,需检查函数声明是否与调用匹配 - 确保变量`_psi_trail`为浮点型(如`float`或`double`),否则可能触发隐式转换警告 修改后应能解决'sin''cos'作用域未声明的编译错误。如问题持续,可提供完整代码片段进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值