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() 尚未声明”。我不明白为什么-我都宣布了。

4

4 回答 4

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

这会尝试在Node *. 但是Node *没有一个名为 getCapacity 的函数——Node有。

您可以使用(*root).getCapacity()或 的简写,root->getCapacity().

      if(r.isLeaf())

你在这里有同样的问题。r是一个Node *

于 2013-01-03T20:47:04.930 回答
3

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

于 2013-01-03T20:52:53.467 回答
3

你的意思是r->isLeaf()代替r.isLeaf(), sincer是一个指针?

于 2013-01-03T20:46:40.440 回答
3

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

于 2013-01-03T20:48:33.907 回答