2013-01-03 60 views
3
#include <cstdlib> 
#include <iostream> 
#include "Node.h" 
#ifndef HW4_H 
#define HW4_H 
using namespace std; 
/** 
You are to implement the two functions in this class. 
You can add any other method or members to it as well. 
However, you cannot change their signature. 
**/ 
class HW4{ 

public: 
    int count(Node* r) const 
    { 
     if(r->next==NULL&&r->bro==NULL) { return 0;} 
     if(r.isLeaf()) 
     { 
      return ((1+count(r->next)+count(r->bro))); 
     } 
     count(r->next); 
    } 

    /* 
    This method will return true if the tree rooted at node sn can answer 
    the demand induced by its leaves. 
    */ 
    bool canDemandBeAnswered(Node* root) 
    { 
     if(count(root)>(root.getCapacity())) 
     { 
      return 0; 
      exit(0);  
     } 
     else 
     { 
      return (canDemandBeAnswered(root->next)&&canDemandBeAnswered(root->bro)); 
     } 
    } 




    /* 
    This method should return a linked list of nodes representing the 
    customers with the overall highest revenue. 
    The resulting list should conform to the capacity limitations. 
    */ 
    //  Node* getBestCustomers(Node* root); 


}; 

#endif 

#include <cstdlib> 
#ifndef NODE_H 
#define NODE_H 

/** 
The Node class. You must implement the two methods isLeaf() and addChild(Node*) below. 
Otherwise, you can add any methods or members your heart's desire. 
The only limitation is that they have to be in this file. 
**/ 
class Node { 
private: 
    int capacity; 
    int price; 


public: 
    /** 
    Hint: to be used for saving the Node's children and for returning the linked list   
    **/ 
    Node* next; 
    Node* bro; 

    Node(){ 
     capacity = 0;   
     price = 0; 
    } 
    Node(int capacity_){ 
     capacity = capacity_; 
     price = 0; 
    }     

    //should return true if this node has no children, false otherwise. 

    //this method adds a child to this node. 


    int getCapacity(){ 
     return capacity; 
    } 


    int getPrice(){ 
     return price; 
    } 

    void setPrice(int price_){ 
     price = price_; 
    } 


    bool isLeaf() 
    { 
     if((this->next)->capacity==0) 
      return 1; 
     else return 0; 
    }  


    void addChild(Node* child) 
    { 
     Node* temp; 
     if(this->next!=NULL) 
     { 
      temp=this->next; 
      child->bro=temp; 
      this->next=child; 
     } 
     else 
      this->next=child; 
    } 
}; 




#endif 

我收到以下错误:“isLeaf()尚未声明”。我不明白为什么 - 我宣布了两个。C++编译器错误:“isLeaf()尚未声明” - 但它是

回答

7
bool canDemandBeAnswered(Node* root) 
{ 
    if(count(root)>(root.getCapacity())) 

这试图调用getCapacity上Node *。但Node *不具有称为getCapacity的功能 - Node。您可以使用(*root).getCapacity()或简写形式root->getCapacity()

 if(r.isLeaf()) 

您在这里遇到同样的问题。 rNode *

3

Did you mean r->isLeaf()而不是r.isLeaf(),因为r是一个指针吗?

+0

dunno。对于我看到的r.isLeaf()也必须给出编译器错误。 – Stefan

3

您应该使用->而不是.来访问这些功能,因为r是一个指针。

3

成员访问指针是不同的。您必须使用间接运算符->。这些不是实际的对象,而只是指向它们的指针。