文件包含在c中

时间:2012-05-09 13:46:07

标签: c++ codeblocks

如果问题很蹩脚,我不是程序员。如果它脱离了上下文,请指引我正确的链接...

如果我有一个头文件说“file.h”,我在其中声明了几个函数。除了在“file.c”中给出定义之外,还有什么方法可以使用不同的.c文件来实现不同的功能,这样头文件仍然是file.h(具有所有相应的功能)。 我正在使用代码块。

任何帮助表示赞赏....

5 个答案:

答案 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( )