我无法理解它的含义:
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;
}
...
答案 0 :(得分:4)
如果您想使用某种类型,您需要先声明它。
struct LandR
在sepChannels_8
本地声明。
如果要将声明公开为函数的返回类型,请将声明移动到全局范围。
另外:按照惯例原型和常量以及类型定义进入.h
文件。实现进入.c
个文件。
答案 1 :(得分:1)
似乎结构的完整声明不存在,只有前向声明(如struct foo;
),所以返回类型不完整 - 你不能这样做。
答案 2 :(得分:1)
更多解释(在每个优秀的C教程中也应该提供):
将多个地方必须存在的内容放入.h
文件中。也就是说,主要是extern
变量声明,函数原型,typedef,结构,枚举等。
将每个函数的实际代码放入.c
文件中。让它们包含所需的.h
个文件,只包含所需的文件。
使用include guard防止多次包含头文件。