使用标头时未编译C程序
C程序我试图编译一个main.C,它使用一个头,但我得到了下面的错误。 当我不使用头文件时,主文件中的所有方法都可以工作 在字符串S中,程序查找所有出现的单词,并返回出现次数最多的单词 我正在使用:gcc main.c进行编译 多谢各位 错误 main.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试图创建它的一个实例,如果没有结构定义,就无法创建它 还有一些其他问题: 我发现很难
您的结构定义必须在标题中。您的结构定义必须在标题中。至少,您需要将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;
};