Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用标头时未编译C程序_C_Linux_Gcc_Compiler Construction - Fatal编程技术网

使用标头时未编译C程序

使用标头时未编译C程序,c,linux,gcc,compiler-construction,C,Linux,Gcc,Compiler Construction,C程序我试图编译一个main.C,它使用一个头,但我得到了下面的错误。 当我不使用头文件时,主文件中的所有方法都可以工作 在字符串S中,程序查找所有出现的单词,并返回出现次数最多的单词 我正在使用:gcc main.c进行编译 多谢各位 错误 main.c 频率 您的结构定义必须在标题中。您的结构定义必须在标题中。至少,您需要将stat\u mot的定义从frequence.c移到frequence.h。main试图创建它的一个实例,如果没有结构定义,就无法创建它 还有一些其他问题: 我发现很难

C程序我试图编译一个main.C,它使用一个头,但我得到了下面的错误。 当我不使用头文件时,主文件中的所有方法都可以工作

在字符串S中,程序查找所有出现的单词,并返回出现次数最多的单词

我正在使用:gcc main.c进行编译

多谢各位

错误

main.c

频率


您的结构定义必须在标题中。

您的结构定义必须在标题中。

至少,您需要将stat\u mot的定义从frequence.c移到frequence.h。main试图创建它的一个实例,如果没有结构定义,就无法创建它

还有一些其他问题:

我发现很难相信char*和char*[34]之间的类型不匹配是通过将所有内容放在一个文件中解决的。因此,我认为修复与您将代码组织到文件中无关,只是您应该传递texte,而不是&texte。 空声明中无用的存储类说明符-是一条令人困惑的错误消息,但这是因为在C语法中,typedef是一个存储类说明符。不要问为什么。基本上,typedef struct stat_mot;是错误的,但这没关系,因为您可以在移动结构定义时删除它。
至少,您需要将stat_mot的定义从frequence.c移到frequence.h。main试图创建它的一个实例,如果没有结构定义,就无法创建它

还有一些其他问题:

我发现很难相信char*和char*[34]之间的类型不匹配是通过将所有内容放在一个文件中解决的。因此,我认为修复与您将代码组织到文件中无关,只是您应该传递texte,而不是&texte。 空声明中无用的存储类说明符-是一条令人困惑的错误消息,但这是因为在C语法中,typedef是一个存储类说明符。不要问为什么。基本上,typedef struct stat_mot;是错误的,但这没关系,因为您可以在移动结构定义时删除它。
标题仅适用于定义-例如编译实际上可以工作,但链接器不知道在哪里查找函数体

尝试使用gcc main.c frequence.c编译

此外,typedef struct stat_mot;没有太多意义-struct stat_mot目前还没有定义,而且,您也没有用这个typedef给它起一个新名称。
我认为分离结构定义是没有意义的,即使它是被允许的-毕竟,如果你只是分发头文件,人们应该知道如何使用结构,例如,看看它包含什么-头只对定义有用-例如,编译实际上有效,但是链接器不知道在哪里寻找函数体

尝试使用gcc main.c frequence.c编译

此外,typedef struct stat_mot;没有太多意义-struct stat_mot目前还没有定义,而且,您也没有用这个typedef给它起一个新名称。
我认为分离结构定义没有意义,即使它是被允许的——毕竟,如果您只是分发头文件,人们应该知道如何使用结构,例如,查看它包含的内容。您在头文件中声明结构stat\u mot为转发声明,但在源文件frequence.c中定义它。因此,它在main.c中不可用。

您在头文件中声明结构stat\u mot作为转发声明,但在源文件frequence.c中定义它。因此无法从main.c使用它。

只需将结构声明放入头文件:

/* in frequence.h */
struct stat_mot {
    char* word;
    int frequency;
};

因此,两个翻译单元,即.c文件都可以看到它。

只需将结构声明放入头文件:

/* in frequence.h */
struct stat_mot {
    char* word;
    int frequency;
};
因此,两个翻译单元(即.c文件)都可以看到它。

struct stat\u mot需要在头文件中定义或使用指针

哦,虽然这不是问题所在

类型定义结构状态

您需要指定第二个类型名称,如下所示:

typedef结构stat\u mot stat\u mot

struct stat\u mot需要在头文件中定义或使用指针

哦,虽然这不是问题所在

类型定义结构状态

您需要指定第二个类型名称,如下所示:

typedef结构stat\u mot stat\u mot

您必须将统计结构设置为frequency.h

此外,main应该声明为

int main(int argc, char **argv)
文本应该是字符*:

因为您使用strstr、strlen和free,所以还应该在frequence.c中包含和

在frequence.c中,strlen总是大于或等于零,因此比较总是正确的。

您必须将stat\u mot结构置于frequence.h中

此外,main应该声明为

int main(int argc, char **argv)
文本应该是字符*:

因为您使用strstr、strlen和free,所以还应该在frequence.c中包含和

在frequence.c中,strlen总是
大于或等于零,因此比较将始终为真。

可能是您应该这样写的

typedef struct stat_mot stat_mot;
以你的频率 然后

typedef struct stat_mot {
    char * word;
    int frequency;
};
在.c文件中

.h文件只是数据文件或方法的声明,但您应该清楚地声明它


小贴士:不需要一个;在主{}的末尾

也许你应该写这个

typedef struct stat_mot stat_mot;
以你的频率 然后

typedef struct stat_mot {
    char * word;
    int frequency;
};
在.c文件中

.h文件只是数据文件或方法的声明,但您应该清楚地声明它


小贴士:不需要一个;在主{}的末尾

还要注意,C中main的有效声明有:int mainnt argc、char*argv[]和int mainvoid。除非您使用的是编译器特有的功能,允许您声明不同类型的main.Btw,否则没有人关心您已经尝试了多少。这与问题无关。还要注意,C中main的有效声明有:int main argc、char*argv[]和int mainvoid。除非您使用的是编译器特有的功能,允许您声明不同类型的main.Btw,否则没有人关心您已经尝试了多少。这与问题无关。
typedef struct stat_mot {
    char * word;
    int frequency;
};