嗨,我在为我的作业编写程序时遇到问题。基本上我们给教授一个程序,需要实现一个用户头文件,允许给定程序中的函数运行。程序描述了一个xy平面上助行器的运动。用户头文件需要包含程序使用的函数。我们有两个课程,所以这里是我们给出的课程之一。我们需要编写Walker.h文件。
给定程序
#include "Walker.h"
#include<iostream>
using namespace std;
int main()
{
Walker w;
int dx=0, dy=0;
try
{
cin >> w;
cout << w << endl;
cin >> dx >> dy;
while ( cin )
{
w.move_by(dx,dy);
cout << w << endl;
cin >> dx >> dy;
}
cout << w << endl;
}
catch ( invalid_argument& e )
{
cout << "Error: " << e.what() << endl;
}
}
这是我的头文件和相应的cpp文件。
#ifndef Walker_H
#define Walker_H
class Walker{
public:
int xcoord, ycoord;
Walker()
{
xcoord = 0;
ycoord = 0;
};
Walker (int x , int y)
{
xcoord = x;
ycoord = y;
};
void move_by(int dx, int dy);
int get_x(void);
int get_y(void);
};
std::istream& operator >> (std::istream& is, Walker& w);
std::ostream& operator << (std::ostream& os, Walker& w);
#endif
这就是头文件的cpp文件
#include <iostream>
#include "Walker.h"
#include <stdexcept>
std::istream& operator >> (std::istream& is, Walker& w)
{
return is >> w.xcoord >> w.ycoord;
};
std::ostream& operator << (std::ostream& os, Walker& w)
{
return os << "(" << w.xcoord << "," << w.ycoord << ")";
};
void Walker::move_by(int dx, int dy)
{
while(cin)
{
xcoord += dx;
ycoord += dy;
}
};
int Walker:: get_x (void)
{
return xcoord;
};
int Walker:: get_y (void)
{
return ycoord;
};
请帮助,我认为我的代码看起来正确,但是当我尝试编译它时有很多笔记。我不知道从哪里开始。
以下是前几条错误消息。
walk.cpp:14:9:错误:'运算符&gt;&gt;'不匹配(操作数类型为'std :: istream {aka std :: basic_istream}'和'Walker') cin&gt;&gt;瓦; ^
/ usr / include / c ++ / 5.1.1 / istream:120:7:注意:参数1从'Walker'到'std :: basic_istream :: __ istream_type&amp; ()(std :: basic_istream :: __ istream_type&amp;){aka std :: basic_istream&amp; ()(标准:: basic_istream&安培;)}”
/ usr / include / c ++ / 5.1.1 / istream:124:7:注意:参数1从'Walker'到'std :: basic_istream :: __ ios_type&amp; ()(std :: basic_istream :: __ ios_type&amp;){aka std :: basic_ios&amp; ()(标准:: basic_ios&安培;)}”
答案 0 :(得分:0)
以下示例来自:http://www.tutorialspoint.com/cplusplus/input_output_operators_overloading.htm,这是一个子页面:http://www.tutorialspoint.com/cplusplus/cpp_overloading.htm
以下是如何重载<<
运算符和>>
运算符
#include <iostream>
using namespace std;
class Distance
{
private:
int feet; // 0 to infinite
int inches; // 0 to 12
public:
// required constructors
Distance(){
feet = 0;
inches = 0;
}
Distance(int f, int i){
feet = f;
inches = i;
}
friend ostream &operator<<( ostream &output,
const Distance &D )
{
output << "F : " << D.feet << " I : " << D.inches;
return output;
}
friend istream &operator>>( istream &input, Distance &D )
{
input >> D.feet >> D.inches;
return input;
}
};
您可能还想阅读此内容:http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html它提供了很多指针&#39;关于如何编写很多不同的情况。