5

我不明白这是什么意思:

error: return type is an incomplete type"

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

主.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 );

    ...
}

函数.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;
}
...
4

3 回答 3

5

如果要使用类型,则需要先声明它。

struct LandR在本地声明为sepChannels_8.

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


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

于 2013-05-21T17:45:59.577 回答
1

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

将必须在多个位置出现的所有内容放入.h文件中。也就是说,主要extern是变量、函数原型、typedef、结构、枚举等的声明。

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

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

于 2013-05-22T07:54:42.597 回答
1

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

于 2013-05-21T17:39:59.037 回答