错误:返回类型是不完整的类型

时间:2013-05-21 17:35:48

标签: c struct return-type

我无法理解它的含义:

error: return type is an incomplete type"

我只想返回结构。我已经分离了两个音频通道,我想使用唯一的函数返回它们。

的main.c

#include "functions.h"
...
struct LandR sepChannels_8( unsigned char *, unsigned long, unsigned char *, unsigned char *);
...
int main()
{
    ...

    sepChannels_8( ptrSamples_8, n, ptrSamples_8_L, ptrSamples_8_R );

    ...
}

function.h

...
struct LandR sepChannels_8( unsigned char *smp, unsigned long N, unsigned char *L, unsigned char *R )
{
    struct LandR
{
    unsigned char *L;
    unsigned char *R;
};
struct LandR LRChannels;

int i;

if ( N % 2 == 0 )
{
    L = malloc(N/2);
    R = malloc(N/2);
}
else
    if ( N % 2 == 1 )
    {
        L = malloc(N/2);
        R = malloc(N/2);
    }

for ( i = 0; i < N; i++ )    // separating
{
    L[2 * i + 0] = smp[2 * i + 0];
    R[2 * i + 0] = smp[2 * i + 1];
}
return LRChannels;
}
...

3 个答案:

答案 0 :(得分:4)

如果您想使用某种类型,您需要先声明它。

struct LandRsepChannels_8本地声明。

如果要将声明公开为函数的返回类型,请将声明移动到全局范围。


另外:按照惯例原型和常量以及类型定义进入.h文件。实现进入.c个文件。

答案 1 :(得分:1)

似乎结构的完整声明不存在,只有前向声明(如struct foo;),所以返回类型不完整 - 你不能这样做。

答案 2 :(得分:1)

更多解释(在每个优秀的C教程中也应该提供):

将多个地方必须存在的内容放入.h文件中。也就是说,主要是extern变量声明,函数原型,typedef,结构,枚举等。

将每个函数的实际代码放入.c文件中。让它们包含所需的.h个文件,只包含所需的文件。

使用include guard防止多次包含头文件。