gpt4 book ai didi

c - 如何正确定义和使用返回类型为用户定义结构的函数? (在 C 中)

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:25 25 4
gpt4 key购买 nike

我尽了最大努力在这方面寻求帮助,但鉴于此问题的关键字,我不断获得没有针对我的特定问题的基本教程。

我得到了一个 C 库来使用定义的“矩阵”作为结构:

typedef struct 
{
int height, width;
double **map;
} Matrix;

我正在编写一个需要输出矩阵的函数。我的代码目前看起来像:

Matrix convolve(Matrix data, Matrix filter) //this is line 28 btw
{
Matrix out;
<code>
return out
}

到目前为止,一切都可以编译。然后我尝试在我的 main() block 中使用它:

int main()
{
double a1[4][5] = <a ton of numbers>
double f[3][3] = <a ton of other numbers>

Matrix m1 = createMatrixFromArray(&a1[0][0],4,5); //from given C library
Matrix mf = createMatrixFromArray(&f[0][0],3,3);

//This is the line that doesn't compile, which is line 14:
Matrix m2 = convolve(m1, mf);
}

然后 VS 2017 的开发人员命令提示说:

(14) error C2440: 'initializing': cannot convert from 'int' to Matrix'
(28) error C2371: 'convolve': redefinition; different basic types

我做错了什么?预先感谢您的帮助。

最佳答案

很难确定,因为您没有发布您的 complete code ,但这两条错误消息的组合强烈表明编译器看到了对 convolve 的使用。声明之前的功能。由于历史原因,当编译器看到一个它不知道的函数时,它会假定该函数返回 int。 ,而不是提示和中止编译。从您显示的代码来看,第一次使用是第 14 行。由于返回了 int分配给 Matrix ,编译器尝试转换该值,但 int 之间没有转换和 Matrix .

后来,在第 28 行,编译器看到了 convolve 的定义。函数,这次返回 Matrix ,这与之前的(隐式)声明不兼容。

在您的情况下,解决方案是在使用之前定义函数。在 C 中,更普遍的是在大多数编程语言中,您需要在使用之前定义(或至少声明)事物。 main函数应该始终是源文件中的最后一个函数,因为它使用其他函数但没有其他函数使用它¹。

如果函数是在不同的源文件中定义的,则需要在头文件 (.h) 中声明它,并将头文件包含在 .c 中。使用该函数的文件。

任何半途而废的编译器至少会明确警告隐式声明:它们是允许的,但这是个坏主意。 Visual Studio 可以做到,但我认为您需要提高默认的警告级别。

¹ 调用 main 的非常不寻常的程序除外递归地。

关于c - 如何正确定义和使用返回类型为用户定义结构的函数? (在 C 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49377726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com