gpt4 book ai didi

C++ 错误 : no match for 'operator<<' in '"Data for "<< Rover::getName()()'

转载 作者:行者123 更新时间:2023-11-28 08:04:21 26 4
gpt4 key购买 nike

我正在为我的 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:

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

最佳答案

<<是流插入运算符。任何地方都没有需要 const char[] 的函数左侧和一个 std::string右侧。因此,您会遇到错误。

您可以在使用 cout 时使用此组合,但这有点欺骗性。调用:

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

定义为:

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

实际调用相当于:

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

使它起作用的是内部调用返回相同的 cout is 被传入以便它可以与其他调用一起使用。如果你不使用类似 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 ,但这与您想要的相反。相反,您可以使用 stringstream 等方法:

#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
}

关于C++ 错误 : no match for 'operator<<' in '"Data for "<< Rover::getName()()' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10593363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com