【问题标题】:Car Class (first time with classes)车课(第一次上课)
【发布时间】:2013-11-13 15:47:45
【问题描述】:

对于一个作业,我需要使用一个名为 car 的类并让它显示品牌和型号,并且当你使用加速时速度增加 5,当你刹车时速度减少 5。我的老师一路帮助我,但当我走到尽头时,我无法让它运行。有人可以纠正我并告诉我为什么错了吗?

小鬼---------

#include <iostream>
#include <string>
using namespace std;

void accelerate()
{ 
    int speed;
    speed = speed + 5;
}

void brake()
{
    int speed;
    speed = speed - 5;
}

标题

#include <iostream>
#include <string>
using namespace std;

class car
{
public:
    car(int getYear, string getMake);
    void accelerate();
    void brake();

private:
    int year;
    string make;
    int speed;
};

汽车类.cpp

#include <string>
#include "CarClass.h"
using namespace std;

int main()
{
    car.(2013,"Kia")
    car.accelerate()
    car.brake()
}

【问题讨论】:

  • main() 方法中的所有行最后都没有;。那甚至不会建立!另外,这只是一个提示:你知道你可以在类的成员方法中声明一个与类的属性之一同名的局部变量吗?如果你这样做了,那么在上述方法中,你将有效地隐藏成员属性。
  • 编译器告诉你什么?这有很多问题,除非你能更具体一些,否则你不会得到答案。
  • 好吧,编译器告诉我我有未解析的外部符号,并查看了这意味着什么,并认为这与我的功能有关,因为我仍在努力解决它们。

标签: c++ function class header


【解决方案1】:

这段代码有两个错误

void accelerate()
{ int speed;


    speed = speed + 5;

}

应该是

void car::accelerate()
{
    speed = speed + 5;
}

刹车也有同样的问题。您使用car:: 符号表示这些函数是car 类的方法

您错过了用于创建car 对象的构造函数定义。

car::car(int getYear, string getMake)
{
    year = getYear;
    make = getMake;
    speed = 0;
}

这应该与 car::accelerate 和 car::brake 放在同一个文件中。

这段代码非常错误

car.(2013,"Kia")
car.accelerate()
car.brake()

我想你是这个意思

car mycar(2013,"Kia");
mycar.accelerate();
mycar.brake();

现在代码将构建并运行,但它仍然不会做任何事情。我不确定你期望它做什么,所以我真的无能为力。

如果你的老师不能帮助你,那么也许你应该读一本关于 C++ 的书。编程是非常无情的,如果您没有完全正确理解它,通常完全是错误的。在这方面你不能虚张声势,你必须从某个地方获得一些扎实的知识。

【讨论】:

  • 构造函数应该使用初始化列表。
  • @juanchopanza OP 有很多东西要学,我尽量少介绍。
  • 我不确定教他们一个他们必须一有机会就忘掉的坏习惯是个好主意。
  • 好的,非常感谢。我忘记了另一半,现在我有了。
【解决方案2】:

这是因为您的Accelerator() 和brake() 函数在函数范围内定义了一个速度变量。您可以将代码更改为:

void car::accelerate()
{ 
    speed += 5;
}



void car::brake()
{  
    speed -= 5;
}

为了使用这个类,你需要像这样声明它:

Car car = new Car(2013,"Kia");

还要确保有分号“;”在你的函数原型和函数调用的末尾,以便它能够编译。

【讨论】:

  • 那个初始化是不合法的 C++。
  • 使用汽车 car = Car(2013,"Kia");或 Car* car = new Car(2013,"Kia");
  • @juanchopanza 哦,是的,我在想 C#,因为我现在正在用 C# 编码,哈哈。我的错。
  • @aj.toulan car x(2013, "Kia"); 就可以了。
  • 该类被称为car 而不是Car,我们不要过度混淆OP。
【解决方案3】:

所以,首先,在您的 main 方法中,您需要一个类的实例 (Car car = new Car(2013,"Kia")),在您的方法中,您使用的是局部变量,因为您是再次宣布速度。

【讨论】:

  • Car car = new Car(),这是一些类似 jave 的 c++ :)
  • 不,那是 Java。至少应该是Car *car = new Car(...);。但它是本地的,所以根本不需要堆分配Car car(...);
  • 是的。哈哈。我的错。正确的是使用指针 (Car *car = new Car(...) 或 Class Instance Car car(...); 抱歉。:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多