无法编译我的家庭作业计划?

时间:2015-10-18 22:15:11

标签: c++

嗨,我在为我的作业编写程序时遇到问题。基本上我们给教授一个程序,需要实现一个用户头文件,允许给定程序中的函数运行。程序描述了一个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&安培;)}”

1 个答案:

答案 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;关于如何编写很多不同的情况。