Помогите с функциями связанного списка .... перегруженный поток оп и получить и установить функции C ++ - PullRequest
0 голосов
/ 30 апреля 2011

Привет всем, я немного застрял, мне нужна помощь с перегрузкой потоковой операции в этих классах.Также мне нужна помощь с данными доступа в связанном списке, который я создаю. В функции throwMudAt () мне нужно найти расстояние, но я не знаю, как вызывать отдельные переменные узла.(у каждого узла есть x и Y, и мне нужно найти расстояние между любым заданным узлом и точкой (x, y), переданной ему. Спасибо! Пропущенное что-нибудь указывает мне правильное направление, пожалуйста.

class Linknode {
  friend class SchmooList;
 public:
  Linknode(){next=0; data =0;}
  ~Linknode(){if (data){delete data; data =0;}}

 private:
  Linknode *next; //"SRO"
  Schmoo *data;

};
#endif

class SchmooList {
 public:
  SchmooList(){first=0;}
  // ~SchmooList();
  bool isEmpty(){return first==NULL;}
  void insertFront(Schmoo*);
  void throwMudAt(double, double);//throws mud at the given (x,y) and adds one
                             //to the mud value of any schmoo within 5.0 feet of given
                             //within 5.0 means distance <= to 5.0
  void removeAt(double, double); //removes any Schmoo that is within 1.0 feet
  int getPopulation();
  void printAll();//send each Schmoo to STDOUT one per line in list order


 private:
  Linknode *first;


};
#endif

using namespace std;

void SchmooList::insertFront(Schmoo *nt){
  Linknode *temp= new Linknode();
  temp -> data=nt;
  temp->next=first;
  first = temp;

}
void SchmooList::throwMudAt(double xx, double yy){
  Linknode *temp=first;
  while(temp){
    double sum = (pow(xx - temp->data.getX(), 2))+(pow(yy - temp->data.getX(), 2));
    double distance = sgrt(sum);

}

/*void SchmooList::removeAt(double x, double y){
   Linknode *temp=first
      while(temp){
       double xd=
       double yd= temp - y;
        if(xd <= 1 || yd <= 1){
         temp == 0;

*/

int SchmooList::getPopulation(){
  int pop=0;
  Linknode *temp=first;
  while(temp){
    pop++;
    temp=temp->next;
  }
  return pop;

}

void SchmooList::printAll(){

  Linknode *temp=first;
  while(temp){
    cout << '*' << endl;      //print the object

    temp = temp->next;
  }
  cout << getPopulation();//for testing
}

class Schmoo{


 public:
  Schmoo(double, double);
  void setX(double);
  double getX() const;
  void setY(double);
  double getY() const;
  void setMud(int);
  int getMud() const;


 private:
  double x;
  double y;
  int mud;

};
#endif

Schmoo::Schmoo(double xx, double yy){
  x = xx;
  y = yy;
  setMud(0);

}


void Schmoo::setX(double x1){
  x = ( x1 >= -1000 && x1 <= 1000) ? x1 : 0;

}
double Schmoo::getX() const{
  return x;

}
void Schmoo::setMud(int m){
  mud = ( m >= -1000 && m <= 1000) ? m : 0;
}
int Schmoo::getMud() const{
  return mud;
}
/*ostream &operator<<(ostream &os, Schmoo &s){
  if(s->getMud() == 1){
    os << "Schmoo at (" << s.x << ", " << s.y << ") was hit mud " << mud << "time.";
  }
  os << "Schmoo at (" << s.x << ", " << s.y << ") was hit with mud" << mud << "times.";
  return os;
}
*/

1 Ответ

1 голос
/ 30 апреля 2011

Вы забыли идти вперед в своем списке.

  void SchmooList::throwMudAt(double xx, double yy){
      Linknode *temp=first;
      while(temp){
        double sum = (pow(xx - temp->data.getX(), 2))+(pow(yy - temp->data.getX(), 2));
        double distance = sqrt(sum);
        temp = temp->next;
    }
...