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()))

これは、でgetCapacityを呼び出そうとしますNode *。しかしNode *、getCapacityと呼ばれる関数はありません-Nodeあります。

(*root).getCapacity()または省略形を使用できますroot->getCapacity()

      if(r.isLeaf())

ここでも同じ問題があります。rですNode *

于 2013-01-03T20:47:04.930 に答える
3

ポインタなので、r->isLeaf()の代わりに意味しましたか?r.isLeaf()r

于 2013-01-03T20:46:40.440 に答える
3

はポインタであるため、これらの関数にアクセスする->代わりにを使用する必要があります。.r

于 2013-01-03T20:48:33.907 に答える
3

ポインタのメンバーアクセスは異なります。間接演算子を使用する必要があります->。これらは実際のオブジェクトではなく、それらへのポインタにすぎません。

于 2013-01-03T20:52:53.467 に答える