如果问题很蹩脚,我不是程序员。如果它脱离了上下文,请指引我正确的链接...
如果我有一个头文件说“file.h”,我在其中声明了几个函数。除了在“file.c”中给出定义之外,还有什么方法可以使用不同的.c文件来实现不同的功能,这样头文件仍然是file.h(具有所有相应的功能)。 我正在使用代码块。
任何帮助表示赞赏....
答案 0 :(得分:3)
NB: this part of the answer refers to the source code the OP deleted from his question...
您将getNode
声明为使用单个int
参数并返回指向node
的指针。然而,您将getNode
定义为不带参数并返回指向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;
}
至于新问题,头文件只是凭借预处理器包含的源代码块。
按惯例,您可以使用它来声明全局变量,函数和数据结构。但是,您必须注意确保这些声明有意义并与应用程序的其余部分保持同步。
答案 1 :(得分:1)
您在treelib.h中定义的getNode定义有一个参数。您在treelib.cpp中的getNode实现没有。所以在treelib.h中它被定义为“node * getNode(int);”但是在treelib.cpp中你已经将它实现为“node * getNode()”。两者不一样。更改treenode.cpp中的版本以匹配标题中的定义,你会没事的。
答案 2 :(得分:1)
头文件通常用于声明结构/类,常量,函数原型,那种东西。但是头文件和源文件之间存在无关系,而不是你给它们的含义;没有“每个源文件一个头文件”或类似的东西。
您可以根据需要拆分代码。 file.h
并不一定意味着任何地方都应该有file.cpp
个文件。这只是惯例。
关于您的问题,您只是错误地实现了您的功能(您在源文件中缺少参数。)
答案 3 :(得分:1)
对于你的第一个问题,是的,你可以,here is an article谈论它。
如果您有一个标题为header.h
的标题文件,并希望将其包含在function.c
以及其他库中的函数,则只需执行以下操作:
header.h中的:
#include "header.c"
#include <other.h>
其中,other.h
是包含其他功能的功能头文件。
N.B。:答案的这一部分是指移除OP的问题的一部分。
对于下一个问题,似乎getNode
的函数声明与您尝试实现它的方式不符。 (创建为void函数,但使用整数参数调用它)。为了解决您的问题,我首先要对其进行排序。
答案 4 :(得分:0)
Q1:是的,只需为每个功能使用不同的实现文件,然后链接它们。
实际上,这是将代码分解为单独编译单元的好方法。它不仅可以更容易地找到相关代码,而且如果从未引用某些函数,还可以减小可执行文件的大小。
Q2:您尚未定义函数getNode(int)
,而是getNode( )