我有一个使用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/