C++错误:与“<< Rover::getName()()”中的数据“中的”运算符<<“不匹配
C++ error: no match for 'operator<<' in '"Data for " << Rover::getName()()'
我正在为我的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;
}
罗孚:
/*
* 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
,以便它可以与其他调用一起使用。如果您不使用类似cout
来表现出这种行为的东西,它的工作方式就不一样了。这也是为什么你可以说:
int i = 5 + 2 + 3;
5 + 2 返回一个 int
,该与 3 相加,并返回分配给 i
的int
。
要连接里面的字符串,你可以用加号替换它,因为字符串和字符数组的加法被定义为 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
}
- 在使用累加时,C++中的运算符+不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- 不显示匹配运算符
- 映射迭代器与运算符不匹配
- 与"运算符<<"C++不匹配
- 与"运算符>>"不匹配(操作数类型为"QDataStream"和"QJsonObject")
- 与标准中的"运算符<<"不匹配
- 运算符不匹配*=
- 不断收到错误" 与"运算符>>不匹配";
- 编译我的 3 个文件时,我收到错误,说"运算符="不匹配
- C++ 模板与运算符<不匹配
- 与"运算符="不匹配
- 代码块编译错误与运算符<<不匹配
- 错误:运算符 [] 不匹配。在比较列表中的 int 和 int 时<int>,
- 解决错误:运算符 [] 不匹配
- 错误:与"运算符>>"不匹配(操作数类型为"std::istream
- 与"运算符[]"不匹配(操作数类型为"std::unique_ptr<std::vector<int> >"和"int")
- 错误:与“运算符 []”不匹配
- C++ 设置:不匹配 - 运算符