- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的 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/
我正在使用 perl Rover 模块版本 3 登录到 Linux/Unix 服务器并运行脚本。在规则集中,如果我添加完整路径名,它将脚本复制到远程服务器,无法替换环境变量。 例如。 这有效: co
我很难理解如何使用 Apollo Rover连同Apollo Codegen为我的 API 架构生成我的 typescript 类型。我在 apollo studio 中注册了我的模式,并且可以将模式
我正在为我的 C++ 类编写一些代码,但我有点卡住了。 这是我正在处理的部分作业: 在 Rover 类中,指定以下成员实例变量: name (String) x position on a g
我是一名优秀的程序员,十分优秀!