如果问题很蹩脚,我不是程序员对不起。如果断章取义,请引导我到正确的链接...
如果我有一个头文件说“file.h”并且我在其中声明了几个函数。除了在“file.c”中给出定义之外,还有什么方法可以让我将不同的.c 文件用于不同的功能,以便头文件保持 file.h(具有所有相应的功能)。我正在使用代码块。
任何帮助表示赞赏....
如果问题很蹩脚,我不是程序员对不起。如果断章取义,请引导我到正确的链接...
如果我有一个头文件说“file.h”并且我在其中声明了几个函数。除了在“file.c”中给出定义之外,还有什么方法可以让我将不同的.c 文件用于不同的功能,以便头文件保持 file.h(具有所有相应的功能)。我正在使用代码块。
任何帮助表示赞赏....
注意:这部分答案是指OP从他的问题中删除的源代码......
您声明getNode
为采用单个int
参数并返回指向 a 的指针node
。然而,您将其定义getNode
为不带参数并返回指向 a 的指针node
。
您要么需要改进您的声明或定义,并且鉴于您对 的使用getNode
,我会改进您的定义:
node* getNode(int data)
{
node* temp=new node;
temp->data = data; // <- use the argument
temp->left=NULL;
temp->right==NULL;
temp->next==NULL;
return temp;
}
至于新问题,由于预处理器,头文件只是源包含的块。
按照惯例,您可以使用它来声明全局变量、函数和数据结构。但是,您必须注意确保这些声明有意义并且与您的应用程序的其余部分同步。
您在 treelib.h 中定义的 getNode 定义有一个参数。您在 treelib.cpp 中的 getNode 实现没有。所以在treelib.h中它被定义为“node* getNode(int);” 但在 treelib.cpp 中,您已将其实现为“node* getNode()”。两者不一样。更改 treenode.cpp 中的版本以匹配标题中的定义,你会没事的。
头文件通常用于声明结构/类、常量、函数原型等。但是除了您赋予它们的含义之外,头文件和源文件之间没有任何关系;没有“每个源文件一个头文件”之类的东西。
您可以根据需要拆分代码。file.h
并不一定意味着file.cpp
任何地方都应该有一个文件。这只是惯例。
关于您的问题,您只是错误地实现了您的功能(您的源文件中缺少一个参数。)
对于您的第一个问题,是的,您可以,这是一篇讨论它的文章。
如果您有一个标题为标题的头文件header.h
并希望它包含包含在另一个库中function.c
以及来自另一个库的函数,您只需
在 header.h 中执行以下操作:
#include "header.c"
#include <other.h>
其中,other.h
是一个包含其他函数的函数头文件。
注意:这部分答案是指OP删除的问题的一部分。
对于您的下一个问题,您的函数声明似乎与您getNode
尝试实现它的方式不匹配。(创建为 void 函数,但使用整数参数调用它)。为了解决你的问题,我会先解决这个问题。
Q1:是的,只需为每个函数使用不同的实现文件,然后链接它们。
事实上,这是将代码分解为单独的编译单元的好方法。它不仅使查找相关代码变得更容易,而且如果某些函数从未被引用,还可以减小可执行文件的大小。
Q2:你还没有定义函数getNode(int)
,而是getNode( )