Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将头文件链接到C++; 对于C++中的文件链接,我有一个特别的问题。假设我有一个名为fmttime.h的头文件,我想将它链接到fmttime.cc(实现文件),下面是我到目前为止所做的 ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime); int main() { struct timeval tv; struct ExpandedTime etime; gettimeofday(&tv, NULL); localTime(&tv,&etime); } ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime) { tzset(); // Corrects timezone int epochT = (tv->tv_sec) - timezone; // Epoch seconds with int epochUT = tv->tv_usec; // Timezone correction int seconds = epochT % 60; epochT /= 60; etime->et_sec = seconds; etime->et_usec = epochUT; int minutes = epochT % 60; epochT /= 60; etime->et_min = minutes; int hours = (epochT % 24) + daylight; // Hours with DST correction epochT /= 24; etime->et_hour = hours; printf("%d,%d,%d\n", seconds, minutes, hours); printf("%d\n", epochUT); printf("%d\n", timezone); printf("%d\n", daylight); return etime; }_C++ - Fatal编程技术网

将头文件链接到C++; 对于C++中的文件链接,我有一个特别的问题。假设我有一个名为fmttime.h的头文件,我想将它链接到fmttime.cc(实现文件),下面是我到目前为止所做的 ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime); int main() { struct timeval tv; struct ExpandedTime etime; gettimeofday(&tv, NULL); localTime(&tv,&etime); } ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime) { tzset(); // Corrects timezone int epochT = (tv->tv_sec) - timezone; // Epoch seconds with int epochUT = tv->tv_usec; // Timezone correction int seconds = epochT % 60; epochT /= 60; etime->et_sec = seconds; etime->et_usec = epochUT; int minutes = epochT % 60; epochT /= 60; etime->et_min = minutes; int hours = (epochT % 24) + daylight; // Hours with DST correction epochT /= 24; etime->et_hour = hours; printf("%d,%d,%d\n", seconds, minutes, hours); printf("%d\n", epochUT); printf("%d\n", timezone); printf("%d\n", daylight); return etime; }

将头文件链接到C++; 对于C++中的文件链接,我有一个特别的问题。假设我有一个名为fmttime.h的头文件,我想将它链接到fmttime.cc(实现文件),下面是我到目前为止所做的 ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime); int main() { struct timeval tv; struct ExpandedTime etime; gettimeofday(&tv, NULL); localTime(&tv,&etime); } ExpandedTime* localTime(struct timeval* tv, ExpandedTime* etime) { tzset(); // Corrects timezone int epochT = (tv->tv_sec) - timezone; // Epoch seconds with int epochUT = tv->tv_usec; // Timezone correction int seconds = epochT % 60; epochT /= 60; etime->et_sec = seconds; etime->et_usec = epochUT; int minutes = epochT % 60; epochT /= 60; etime->et_min = minutes; int hours = (epochT % 24) + daylight; // Hours with DST correction epochT /= 24; etime->et_hour = hours; printf("%d,%d,%d\n", seconds, minutes, hours); printf("%d\n", epochUT); printf("%d\n", timezone); printf("%d\n", daylight); return etime; },c++,C++,基本上,我在标题中也包含了fmttime.h。我对整个过程有几个问题。在fmttime.h中,我所拥有的只是这个函数原型(这是我的目的所需要的全部) 现在,如果我想在fmttime.cc实现文件中使用这个函数,我需要重新声明函数原型吗?或者可以跳过它,因为头文件已经包含它,因此包含在fmttime.cc中,因为有通过#include链接的 因此,我基本上想添加到.CC文件char*formatTime(struct timeval*..)中,但不确定是否仍需要在.CC中声明原型,或在fmttim

基本上,我在标题中也包含了fmttime.h。我对整个过程有几个问题。在fmttime.h中,我所拥有的只是这个函数原型(这是我的目的所需要的全部)

现在,如果我想在fmttime.cc实现文件中使用这个函数,我需要重新声明函数原型吗?或者可以跳过它,因为头文件已经包含它,因此包含在fmttime.cc中,因为有通过#include链接的

因此,我基本上想添加到.CC文件char*formatTime(struct timeval*..)中,但不确定是否仍需要在.CC中声明原型,或在fmttime.h文件中声明原型。

\include
文件替换实际上是一种文本替换操作。标题的内容直接粘贴到包含它的文件中

所以,你可以自己回答这个问题。想象一下,头文件中的代码实际上也在实现文件中(因为它是这样的)。

#include
ing文件实际上是一个文本替换操作。标题的内容直接粘贴到包含它的文件中

所以,你可以自己回答这个问题。假设头文件中的代码实际上也在实现文件中(因为它是这样的)。

头文件只包含在源文件中。它们没有联系。在处理预处理器指令(如#include)后,编译器将把源代码编译成目标文件(.o)。然后将对象文件传递给链接器进行链接

对于最后一个问题,我建议您尝试在不使用#include指令的情况下编译.CC文件,然后#包含头文件并再次编译。

头文件仅#包含在源文件中。它们没有联系。在处理预处理器指令(如#include)后,编译器将把源代码编译成目标文件(.o)。然后将对象文件传递给链接器进行链接

对于最后一个问题,我建议您尝试在不使用#include指令的情况下编译.CC文件,然后#包含头文件并再次编译。

请记住:

.h/hpp->函数原型、变量/结构/枚举定义

.c/.cpp->函数实现(.c/.cpp需要包含其相应的头)

记住:

.h/hpp->函数原型、变量/结构/枚举定义


.c/.cpp->函数实现(.c/.cpp需要包含它们相应的头)

哦,我明白了。感谢外行对代码受损的解释,比如我:)事实上,如果有人能回答的话,我还有一个问题……在函数localtime()中,我这里的逻辑是否正确?首先,我要将指向结构etime的指针传递给函数。因此,我能够编辑expandedtime结构字段内的对象……然后,通过说“return etime”,我将该结构的编辑版本返回到main?@user2163350:是的,您的推理是正确的。然而。。。为什么要从函数返回它?只需明确指出,
etime
应该是指向分配的
ExpandedTime
对象的指针,然后填充该对象,并且不返回任何内容。传入一个预期会发生变异的参数并收到它的副本是非常奇怪的。是的,我认为这很奇怪…这更像是一种形式,因为我不擅长编码。我发现编辑ExpandedTime结构的内容,然后再次返回,这很奇怪。正如你所说,它已经改变了结构的场。但是,函数原型需要返回一个参数,该参数是ExpandedTime*的,因此我自然返回了etime。那么你是说只删除return语句?我的印象是,除非函数无效,否则不需要返回…@user2163350:你编写了函数原型,对吗?你可以改变它。如果,由于某种奇怪的原因,你不能改变它。。。你必须让它像我想的那样。哈哈,是的,很抱歉让人困惑……但它是学校实验室的一部分。所以我不得不使用他给我们的原型。哦,我明白了。感谢外行对代码受损的解释,比如我:)事实上,如果有人能回答的话,我还有一个问题……在函数localtime()中,我这里的逻辑是否正确?首先,我要将指向结构etime的指针传递给函数。因此,我能够编辑expandedtime结构字段内的对象……然后,通过说“return etime”,我将该结构的编辑版本返回到main?@user2163350:是的,您的推理是正确的。然而。。。为什么要从函数返回它?只需明确指出,
etime
应该是指向分配的
ExpandedTime
对象的指针,然后填充该对象,并且不返回任何内容。传入一个预期会发生变异的参数并收到它的副本是非常奇怪的。是的,我认为这很奇怪…这更像是一种形式,因为我不擅长编码。我发现编辑ExpandedTime结构的内容,然后再次返回,这很奇怪。正如你所说,它已经改变了结构的场。但是,函数原型需要返回一个参数,该参数是ExpandedTime*的,因此我自然返回了etime。那么你是说只删除return语句?我的印象是,除非函数无效,否则不需要返回…@user2163350:你编写了函数原型,对吗?你可以改变它。如果,为了一些奇怪的原因
 // Interface file for fmttime.h which is including the fmttime.c
 // Contains function prototype

 char* formatTime(struct timeval* tv, char* buf, size_t len);