我有一个使用sortList()的函数mergeList()。我在头文件“ sortList.h”中声明它们,并分别在sortList.cpp和mergeList.cpp中实现它们。但是,当我编译时,出现错误,表明我没有在文件“ sortList.cpp”中声明函数mergeList()。我想知道既然我已经在头文件中声明了mergeList(),在实现sortList()(使用mergeList)之前不应该编译它吗?还是应该在mergeList()中再次声明sortList.cpp?谢谢!

sortList.h:

#ifndef SORTLIST_H_INCLUDED
#define SORTLIST_H_INCLUDED

struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
  };

ListNode *mergeList(ListNode *left, ListNode *right);
ListNode *sortList(ListNode *head);

#endif // SORTLIST_H_INCLUDED

最佳答案

Q:I wonder since I already declare mergeList() in the header file, shouldn't it be complied before implementation of sortList() (which uses mergeList)?

在C语言中,当包含头文件(即:#include "sortList.h")时,好像#include ...行被插入指定的.h文件的整个代码所代替。本质上,.h文件的内容成为正在编译的.c文件(或.cpp文件)的一部分。

对于每个包含任何特定.c文件的.cpp文件(或.h文件),都是如此。

因此,在上述问题"...shouldn't it be complied before implementation of sortList()"中,答案为“否”。不是“之前”,而是“有”。具体来说,如果sortList()中存在原型mergeList()sortlist.h,则对于sortcc.cpp和mergeList.cpp到#include "sortList.h"都是惯例。”因此,sortList.h的代码成为这两个文件的一部分。

Q:Or shall I declare mergeList() again in sortList.cpp?

不,只需确保sortList.h中包含sortList.cpp.

关于c++ - 头文件中的多功能声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23641522/

10-11 17:55