0

我正在为我的 C++ 类编写一些代码,但我有点卡住了。

这是我正在处理的任务的一部分:


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

 name (String)

 x position on a grid (integer)

 y position on a grid (integer)

 direction by compass – N, S, E, or W (String)

 speed (0 – 5 meters per second, integer)

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

 No-arg constructor – set the rover’s position to (0,0), its speed to 0, 
  its direction to North,and its name to Default

 Constructor that receives parameters to initialize all five 
  instance variables described above

 Setter methods for each instance variable

 Getter methods for each instance variable

 getRoverData – returns a string that displays values for each instance 
  variable of the current rover object, placing each value on a separate line, 
  as follows:

所以现在我只想让基本案例发挥作用。这是我的全部代码:


主.cpp:

#include <iostream>
#include "Rover.h"

using namespace std;


int main() {

    Rover rover1;

    rover1.setDefaultValues();

    cout<<rover1.getRoverData(rover1)<<endl;

    return 0;
}

漫游者.cpp:

#include <iostream>
#include "Rover.h"
using namespace std;

//put functions in here

void Rover::setDefaultValues() {
    name = "Default";
    xcoord = 0;
    ycoord = 0;
    direction = "N";
    speed = 0;

}

void Rover::constructRover() {

}

void Rover::setXcoord(int xcoord) {
    this->xcoord = xcoord;
}

void Rover::setYcoord(int ycoord) {
    this->ycoord = ycoord;

}

void Rover::setName(string name) {
    this->name = name;
}

void Rover::setDirection(string direction) {
    this->direction = direction;
}

void Rover::setSpeed(int speed) {
    this->speed = speed;
}

int Rover::getXcoord() {
    return xcoord;

}

int Rover::getYcoord() {
    return ycoord;
}

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

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

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

string Rover::getRoverData(Rover rover) {
    string printStatement = "";
    printStatement.append("Data for " << rover.getName());
    printStatement.append("\nX: " << Rover::xcoord);
    printStatement.append("\nY: " << Rover::ycoord);
    printStatement.append("\nDirection: " << Rover::direction);
    printStatement.append("\nSpeed: " << Rover::speed);
    return printStatement;

}

漫游者.h:

/* 
 * File:   Rover.h
 * Author: Matthew
 *
 * Created on May 14, 2012, 8:10 PM
 */


#ifndef ROVER_H
#define ROVER_H

using namespace std;


class Rover
{
        private:
            string name;
            int xcoord;
            int ycoord;
            string direction;
            int speed;


    public:
            void setDefaultValues();
            void constructRover();
            //XCoordinates
            void setXcoord(int xcoord);
            int getXcoord();
            //YCoordinates
            void setYcoord(int ycoord);
            int getYcoord();
            //Name
            void setName(string name);
            string getName();
            //Direction
            void setDirection(string direction);
            string getDirection();
            //Speed
            void setSpeed(int speed);
            int getSpeed();
            //Printout
            string getRoverData(Rover rover);

};

#endif  /* ROVER_H */

我目前得到的错误是:

rover.cpp:64: error: no match for 'operator<<' in '"Data for " << Rover::getName()()'

见鬼是什么意思?

在这一点上,我希望打印输出说的是:

Data for Default
X: 0
Y: 0
Direction: N
Speed: 0

有什么想法吗?

抱歉,如果我发布的代码看起来很糟糕......以前没有这样做过。


更新:


#include <iostream>
#include "Rover.h"
using namespace std;

//put functions in here

void Rover::setDefaultValues() {
    name = "Default";
    xcoord = 0;
    ycoord = 0;
    direction = "N";
    speed = 0;

}

void Rover::constructRover() {

}

void Rover::setXcoord(int xcoord) {
    this->xcoord = xcoord;
}

void Rover::setYcoord(int ycoord) {
    this->ycoord = ycoord;

}

void Rover::setName(string name) {
    this->name = name;
}

void Rover::setDirection(string direction) {
    this->direction = direction;
}

void Rover::setSpeed(int speed) {
    this->speed = speed;
}

int Rover::getXcoord() {
    return xcoord;

}

int Rover::getYcoord() {
    return ycoord;
}

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

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

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

string Rover::getRoverData(Rover rover) {
    string printStatement = "";
    printStatement.append("Data for " + rover.getName());
    printStatement.append("\nX: " + rover.getXcoord());
    printStatement.append("\nY: " + rover.getYcoord());
    printStatement.append("\nDirection: " + rover.getDirection());
    printStatement.append("\nSpeed: " + rover.getSpeed());
    return printStatement;

}

所以,现在打印输出是:

Data for Default
X:
Y:
Direction: N
Speed:

所以,它基本上不会打印出零。想法?

4

1 回答 1

1

<<流插入运算符。任何地方都没有采用const char[]左手边和std::string右手边的功能。因此,您会遇到错误。

使用的时候可以使用这个组合cout,但是有点欺骗性。来电:

std::cout << "Some string" << someStdString;

定义为:

(std::cout << "Some string") <<  someStdString;

实际调用相当于:

operator<< (operator<< (std::cout, "Some string"), someStdString);

使它工作的事情是内部调用返回相同cout的是被传入,以便它可以与其他调用一起使用。如果你不使用类似的东西cout表现出这种行为,它就不会以同样的方式工作。这也是为什么你可以说:

int i = 5 + 2 + 3;

5 + 2 返回一个int与 3 相加的 ,并返回int分配给 的i

要连接里面的字符串,你可以用加号替换它,因为字符串和字符数组的加法被定义为 std::string 的一部分,或者添加另一个append调用:

printStatement.append("Data for " + rover.getName());
//or
printStatement.append("Data for ");
printStatement.append(rover.getName());
//or
printStatement += "Data for " + rover.getName();

更新:

为了回答您的其他问题,这是 C++ 的另一个特性,它不是 Java 的一部分。我没有意识到您正在向其中一些添加整数。当你这样做时,引号中的字符数组实际上会衰减为一个指针。然后,使用指针算法将整数相加。根本不是你想要的。所以基本上你将指针传递给字符串文字的开头,向前移动 x 个字符,其中 x 是你要添加到它的数字。添加 0 意味着它只是停留在那里,所以整个字符串都被传递并且+ 0几乎是死代码。

如果要添加整数,则需要一种将整数转换为字符串的方法,然后再添加它们。C++11 有stoi,但这与你想要的相反。相反,您可以使用字符串流,以及其他方法:

#include <sstream>

int main()
{
    std::stringstream ss;
    ss << 5; //the int to be converted
    std::string s = ss.str(); //get the string
    cout << s + " is the number"; //print with an added string
}
于 2012-05-15T02:16:38.450 回答