【问题标题】:C++ object oriented problems [closed]C ++面向对象的问题[关闭]
【发布时间】:2014-12-13 00:21:59
【问题描述】:

这是我想弄清楚的一个任务:

创建一个名为 Project3 的新项目并创建一个名为 Rover 的类

在 Rover 类中,指定以下成员实例变量:

  • 名称(字符串)
  • 网格上的 x 位置(整数)
  • 网格上的 y 位置(整数)
  • 指南针方向 - N、S、E 或 W(字符串)
  • 速度(0 - 5 米每秒,整数)

在 Rover 类中,指定以下方法:

  • 默认构造函数 - 将流动站的位置设置为 (0,0),速度设置为 0,方向设置为 北。
  • 接收参数以初始化上述所有五个实例变量的构造函数
  • 每个实例变量的设置方法
  • 每个实例变量的 Getter 方法
  • getRoverData – 返回一个字符串,显示每个实例变量的值 当前流动站对象,将每个值放在单独的行上,如下所示:

    Rover name: A
    X-position: 0
    Y-position: 0
    Direction: E
    Speed: 1
    

创建一个类客户端(主),它创建一个最多包含五个流动站的数组并获取初始 来自用户的所有流动站的值。在用户为每个流动站指定值后,显示摘要 流动站的值如上所示。

我有大约十亿个错误,我不知道为什么。

using namespace std;

class Rover {
private:
    string name;
    int x;
    int y;
    string direction;
    int speed;
    int position[10][10];
public:
    void Rover();
    void constructor(string name, int x, int y, string direction, int speed);
    void setName(string name);
    void setX(int x);
    void setY(int y);
    void setDirection(string direction);
    void setSpeed();
    string getName();
    int getX();
    int getY();
    string getDirection();
    int getSpeed();
    string getRoverData();



};

void Rover::Rover() {
    r1.position[0][0];
    r1.speed = 0;
    r1.direction = "N";
}

string Rover::getRoverData() {
    cout << "Rover name: " << r1.getName() << endl;
    cout << "X-position: " << r1.getX() << endl;
    cout << "Y-position: " << r1.getY() << endl;
    cout << "Direction: " << r1.getDirection() << endl;
    cout << "Speed: " << r1.getSpeed() << endl;
}

void Rover::constructor(string name1, int x1, int y1, string direction1, int speed1) {
    r1.name = name1;
    r1.x = x1;
    r1.y = y1;
    r1.direction = direction1;
    r1.speed = speed1;

}

void Rover::setName(string name) {
    r1.name = name;
}

void Rover::setX(int x) {
    r1.x = x;
}

void Rover::setY(int y) {
    r1.y = y;
}

void Rover::setDirection(string direction) {
    r1.direction = direction;
}

void Rover::setSpeed(int speed) {
    r1.speed = speed;
}

string Rover::getName() {
    return name;
}

int Rover::getX() {
    return x;
}

int Rover::getY() {
    return y;
}

string Rover::getDirection() {
    return direction;
}

int Rover::getSpeed() {
    return speed;
}

int main(int argc, char** argv) {
    string name;
    int x;
    int y;
    string direction;
    int speed;

    Rover r1;
    r1.constructor("Yoda", 3, 3, "N", 3);

    cout << "Enter name for Rover: ";
    cin >> name;
    r1.setName(name);
    cout << "Enter its x position: ";
    cin >> x;
    r1.setX(x);
    cout << "Enter its y position: ";
    cin >> y;
    r1.setY(y);
    cout << "Enter direction N,E,S,W: ";
    cin >> direction;
    r1.setDirection(direction);
    cout << "Enter its speed: ";
    cin >> speed;
    r1.setSpeed(speed);

    r1.getRoverData();


    return 0;
}

【问题讨论】:

  • "我有大约 10 亿个错误" - 然而你连 一个 都懒得发帖。请在您的帖子中包含您收到的确切错误消息
  • 这是一个类还是一个头文件,看起来你已经将它们融合成一个了!
  • 这段代码有很多基本错误。如果您不确定自己在做什么,则应在尝试编译之前编写更少的新代码行。这样,您将在更本地化的区域中出现更少的错误。
  • @FeatheredOrcian 它是一个文件中的完整程序,它恰好包含一个类。这是编写小型示例程序的一种完全合法的方式,有时大学评审程序要求将源代码放在一个文件中。
  • ...虽然有很多缺失的包含以及可怕的using namespace

标签: c++ object


【解决方案1】:

您的示例似乎不完整。我猜你只是错过了在你的帖子中包含以下几行

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

首先,构造函数没有返回类型,所以void Rover(); 没有意义。删除void,你就在那里了。

其次,您认为r1 究竟应该是什么?编译器应该告诉你标识符是未定义的,因为它不是。从你的成员函数中删除 r1.(即任何以 Rover:: 开头的函数。你就在那里。

第三,你觉得r1.position[0][0]会做什么?这只是一个什么都不做的表达。即使position[0][0] 也不会做任何事情。也许您想以某种方式初始化数组,但您没有提供足够的信息来确定您要使用它完成什么。

第四,成员函数void Rover::setSpeed(int)尚未在Rover类中声明。你忘了什么吗?根据您的代码,它应该是

int Rover::getSpeed()
{
    return speed;
}

第五,void Rover::setSpeed(); 没有多大意义,除非它实际上接受一个参数。

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2014-07-10
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多