C - 错误:未声明dm_mmc_ops(首次在此函数中使用)



我正在使用Buildroot为我的嵌入式系统(cyclone V)构建一个u-boot引导加载程序,但出现以下错误:

错误:"dm_mmc_ops"未声明(首次在此函数中使用)

在几次尝试理解/解决错误失败后,我设法隔离了看起来像以下简单代码并生成相同错误的问题:

文件1.h

#ifndef FILE1
#define FILE1
struct dm_mmc_ops {
int (*send_cmd)(int data);
int (*set_ios)(char* dev);
};
struct dev {
struct dm_mmc_ops* ops;
} *dev;
#define mmc_get_ops(dev)        ((dm_mmc_ops *)(dev)->ops)
#endif

文件2.h

#ifndef FILE2
#define FILE2
#include "file1.h"
extern const struct dm_mmc_ops dm_dwmci_ops;
#endif

文件2.c

#include <stdio.h>
#include "file1.h"
#include "file2.h"
int return_int (int data)
{
return data;
}
int return_ptr (char* data)
{
return (int) data;
}

const struct dm_mmc_ops dm_dwmci_ops = {
.send_cmd   = return_int,
.set_ios    = return_ptr
};
void main (void)
{
struct dev my_dev = {.ops = &dm_dwmci_ops};
dev = &my_dev;
char text[] = "abcd";

struct dm_mmc_ops *test_mmc = mmc_get_ops(dev);  // Error is here !!!
printf("%dn",test_mmc->send_cmd(50));
printf("%dn",text);
printf("%dn",test_mmc->set_ios(text));
return;
}

然后生成的错误是:

错误:"dm_mmc_ops"未声明(首次在此函数中使用)

我的代码中出了什么问题,我应该怎么做才能摆脱这个错误?

你的问题就在这里

#define mmc_get_ops(dev)        ((dm_mmc_ops *)(dev)->ops)
^^^^^^^^^^

你可能想要

#define mmc_get_ops(dev)        ((struct dm_mmc_ops *)(dev)->ops)

除此之外,您还有许多其他问题。将编译器设置为高警告级别(例如 gcc -Wall ...),然后修复所有警告。

最新更新