引用指针不适用于C ++中的头文件

佩勒的血

当我在头文件中使用*&引用时,出现错误

void free_memory_circle( Node  *& root );

error: expected ‘;’, ‘,’ or ‘)’ before ‘&’ token

我有一个喜欢的列表文件,所有功能都在一个文件中,当我尝试将它们分为.h和.cc文件时,我不能使用*&引用指针。有人可以解释一下我的原因。

我的头文件已编辑

#ifndef _EX4A_FREEMEMORY_H_
#define _EX4A_FREEMEMORY_H_

#include "BST.h"


void free_memory_circle( Node  *&root );
void free_memory_rectangle( Node  *&root );



#endif  // FreeMemory.h

我的代码文件

#include<cstdlib>
#include "FreeMemory.h"
#include "Circle.h"
#include "Rectangle.h"

void free_memory_circle( Node  *&root )
{
    if( root == NULL ) return;
    free_memory_circle( root->_left );
    free_memory_circle( root->_right );
    delete( (Circle * )root->data);
    delete ( root);

}

void free_memory_rectangle( Node  *&root )
{
    if( root == NULL ) return;

    free_memory_rectangle( root->_left );
    free_memory_rectangle( root->_right );
    delete( (Rectangle * )root->data);
    delete ( root);

}

BST.h文件

#ifndef _EX4A_BST_H_
#define _EX4A_BST_H_
#include "Circle.h" 
#include "Rectangle.h"

typedef struct Node
{
    void *data;
    struct Node *_left, *_right;
} Node ;

extern double max_radius;   //saves maximum radius
extern double max_area_rect;    //saves maximum area of rectangles
extern Node *BST_circles ;
extern Node *BST_rectangles ;

//this is a similar to linked list(binary search tree)
//so I have to use *& here for head node
//void add_circle_BST( Node *& root , Circle *p );
void add_circle_BST( Node * root , Circle *p );
void PrintBST_circle_inorder( Node *root );
void add_rectangle_BST( Node *root , Rectangle *p );
void PrintBST_Rectangle_inorder( Node *root );
void find_max_radius( Node *root);
void find_max_area_rect( Node *root);

#endif  // BST.h

BST.cc文件

#include<iostream>
#include "BST.h"
#include "Rectangle.h"
#include "Circle.h"

using namespace std;

double max_radius = 0;  //saves maximum radius
double max_area_rect = 0;   //saves maximum area of rectangles

Node *BST_circles = NULL;
Node *BST_rectangles = NULL;

//this is a similar to linked list(binary search tree)
//so I have to use *& here for head node
void add_circle_BST( Node *&root , Circle *p )
{
    //root = BST_circles;
    if( !root ) //IF root is null
    {
        root = new Node;
        root->data = p;
    }else{
            Circle *temp = (Circle *)root->data;
            if( temp->_x > p->_x){  //if x value less than root x                
            add_circle_BST(root->_left , p); //add to left
    }else{
            add_circle_BST( root->_right , p);
    }
}
}

void PrintBST_circle_inorder( Node *root )
{
if( root ){
    PrintBST_circle_inorder( root->_left);
    Circle *temp = (Circle *)root->data;
    cout << temp->_x << " " << temp->_y << " "
            << temp->_r << endl;
    PrintBST_circle_inorder( root->_right);

}

}


void add_rectangle_BST( Node *root , Rectangle *p )
{
if( !root ){    //IF root is null
    root = new Node;
    root->data = p;
}else { //
    Rectangle *temp = (Rectangle *)root->data;
    if( temp->_top_left_x > p->_top_left_x)//if x value less than root x
    {
        add_rectangle_BST(root->_left , p); //add to left
    }
    else
    {
        add_rectangle_BST( root->_right , p);
    }
}
}


void PrintBST_Rectangle_inorder( Node *root )
{
if( root )
{
    PrintBST_Rectangle_inorder( root->_left);
    Rectangle *temp = (Rectangle *)root->data;
    cout << temp->_top_left_x << " " << temp->_top_left_y << " "
            << temp->_bot_right_x << " " << temp->_bot_right_y << endl;
    PrintBST_Rectangle_inorder( root->_right);

}

}



void find_max_radius( Node *root)
{
if( root ){ //IF root is null
    Circle *temp = (Circle *)root->data;
    if( max_radius < temp->_r )
    {
        max_radius = temp->_r;
    }
    find_max_radius(root->_left ); //add to left
    find_max_radius( root->_right);

}
}

void find_max_area_rect( Node *root)
{
if( root ){ //IF root is null
    Rectangle *temp = (Rectangle *)root->data;
    if( max_area_rect < Area_rect( temp ) )
    {
        max_area_rect = Area_rect( temp );
    }
    find_max_area_rect(root->_left ); //add to left
    find_max_area_rect( root->_right);

}
}

Circle.h

#ifndef _EX4A_CIRCLE_H_
#define _EX4A_CIRCLE_H_


typedef struct Circle{
    double _x,_y,_r;
} Circle;

#endif  // Circle.h

FreeMemory.h

#ifndef _EX4A_FREEMEMORY_H_
#define _EX4A_FREEMEMORY_H_

#include "BST.h"

void free_memory_circle( Node  *&root );
void free_memory_rectangle( Node  *&root );

#endif  // FreeMemory.h
土豆泥

我们仍然没有您的所有标头文件,但我想其中Circle.h包括这些文件FreeMemory.h,导致有问题的声明在的声明之前进行了解析struct Node

您可以使用前向声明Node而不是include来打破循环依赖关系(如果确实存在)BST.h,从中仅需要一个小项。

// #include "BST.h" <= remove this

struct Node; // Introduce Node as a placeholder, or "incomplete class."

void free_memory_circle( Node  *&root );
void free_memory_rectangle( Node  *&root );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

解引用不适用于集合中的智能指针

来自分类Dev

C中的头文件

来自分类Dev

cout 不适用于 ostream 头文件

来自分类Dev

在C ++中定义头文件

来自分类Dev

在C中包含头文件

来自分类Dev

C文件中的头文件路径

来自分类Dev

函数别名适用于头文件

来自分类Dev

_Layout.cshtml 中引用的 JS 文件/函数不适用于其他视图

来自分类Dev

C ++中的函数重载。不适用于float,适用于double

来自分类Dev

磁盘写入不适用于C中的malloc

来自分类Dev

在C ++中创建静态库(.a)(不适用于iOS)

来自分类Dev

C中的HashTable不适用于字符串

来自分类Dev

函数重载不适用于 C++ 中的模板?

来自分类Dev

OrdinalIgnoreCase 不适用于 c# 中的动态数组

来自分类Dev

在C#中解析C头文件

来自分类Dev

在C#中解析C头文件

来自分类Dev

分隔的头文件中的C ++嵌套类

来自分类Dev

#include opencv中的C ++头文件

来自分类Dev

头文件中的C ++循环依赖

来自分类Dev

在Windows中全局存储C ++头文件

来自分类Dev

C-头文件中的结构定义

来自分类Dev

使用头文件C中定义的结构

来自分类Dev

单独的头文件中的C ++结构原型

来自分类Dev

C ++头文件中的静态函数

来自分类Dev

识别C头文件中的结构

来自分类Dev

在C中运行“ parsefmt”的头文件?

来自分类Dev

头文件中的C函数实现

来自分类Dev

#include opencv中的C ++头文件

来自分类Dev

dev c ++头文件中的#include <utility>