我的bug呢 2023-06-23 21:20 采纳率: 57.1%
浏览 14

C语言自定义结构体返回,不允许使用类型名


#define m 3  //b-tree的阶,暂设为3
#include "00_state.h"

typedef int KeyType;
typedef KeyType Record;

typedef struct BTNode{
    int keynum;  //结点中关键字个数 
    struct BTNode *parent;  // 指向双亲结点 
    KeyType key[m+1];  //关键字向量,0号单元未使用 
    struct BTNode *ptr[m+1];  // 子树指针向量 
    Record * recptr[m+1]; //记录指针向量,0号单元未使用 
} BTNode,*BTree; //B-树结点和B-树类型 

typedef struct{
    BTNode * pt;
    int i;
    int tag;
}Result;






#include "04_b-tree.h"
Result search_btree(BTree T,KeyType K);

int main(){
    printf("xiba");
}

Result * search_btree(BTree T,KeyType K){
    BTree p = T, q = NULL;
    int flag = 0,i = 0;
    int found = 0;
    while(p && !found){
        int i = 0;
        KeyType *keys = p->key;
        for(int j = 1;j <= p->keynum ; j++){    
            if(keys[j]>=K){
                i = j;
                break;
            }
        }
        if(keys[i] == K){
            found = TRUE;
        }else{
            q = p;
            p = p->ptr[i-1];
        }    
    }
    Result *r =(Result *) malloc(sizeof(Result));
    if(found){
        
        return *r;
    }else{
        return  *r;
    }    
}

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/531583625786159.png "#left")

  • 写回答

3条回答 默认 最新

  • Ltd Pikashu CSDN实力新星 2023-06-23 21:40
    关注

    在你原本的代码中,你定义了一个结构体类型 Result,并尝试在函数 search_btree 中使用它作为返回类型。
    然而,根据 C 语言的规则,你不能将类型名用作返回类型。

    为了解决这个问题,你可以使用 typedef 将结构体类型定义为别名,然后在函数声明和定义中使用该别名。

    下面是修改后的代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int KeyType;
    #define TRUE 1
    
    typedef struct BTreeNode {
        KeyType *key;
        struct BTreeNode **ptr;
        int keynum;
    } * BTree;
    
    typedef struct Result {
        // 定义 Result 结构体的成员
    } Result;
    
    Result search_btree(BTree T, KeyType K);
    
    int main() {
        printf("xiba\n");
        return 0;
    }
    
    Result search_btree(BTree T, KeyType K) {
        BTree p = T, q = NULL;
        int flag = 0, i = 0;
        int found = 0;
        while (p && !found) {
            int i = 0;
            KeyType *keys = p->key;
            for (int j = 1; j <= p->keynum; j++) {
                if (keys[j] >= K) {
                    i = j;
                    break;
                }
            }
            if (keys[i] == K) {
                found = TRUE;
            } else {
                q = p;
                p = p->ptr[i - 1];
            }
        }
        Result r;
        if (found) {
            // 对 r 进行赋值
        } else {
            // 对 r 进行赋值
        }
        return r;
    }
    

    在这个修正后的代码中,我使用了 typedef 来将 struct Result 定义为 Result 的别名。这样你就可以在函数声明和定义中使用 Result 数组作为返回类型。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月23日

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 深度学习残差模块模型
  • ¥50 怎么判断同步时序逻辑电路和异步时序逻辑电路
  • ¥15 差动电流二次谐波的含量Matlab计算
  • ¥15 Can/caned 总线错误问题,错误显示控制器要发1,结果总线检测到0
  • ¥15 C#如何调用串口数据
  • ¥15 MATLAB与单片机串口通信
  • ¥15 L76k模块的GPS的使用
  • ¥15 请帮我看一看数电项目如何设计
  • ¥23 (标签-bug|关键词-密码错误加密)