Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++ 在.h文件中调用init()函数_C++_C++11_Header Files - Fatal编程技术网

C++ 在.h文件中调用init()函数

C++ 在.h文件中调用init()函数,c++,c++11,header-files,C++,C++11,Header Files,我希望能够从另一个.h文件中包含的.h文件调用init()函数,如下所示: T1.h: T2.h: 正确的方法是什么?您是否希望调用T1::init()的次数与调用T2的次数相同。h包含在某个地方?为什么呼叫必须在标题中?练习的最终目标是什么?看起来很像。请查看您的编译器是否支持#pragma startup。如果是这样,您可以在一个独立函数中调用init(),该函数在程序启动时调用#pragma。否则,您可以在T2.h中声明的静态类/结构变量的构造函数中调用init()(最好在T2.cpp中声

我希望能够从另一个
.h
文件中包含的
.h
文件调用
init()
函数,如下所示:

T1.h:

T2.h:


正确的方法是什么?

您是否希望调用
T1::init()
的次数与调用
T2的次数相同。h
包含在某个地方?为什么呼叫必须在标题中?练习的最终目标是什么?看起来很像。请查看您的编译器是否支持
#pragma startup
。如果是这样,您可以在一个独立函数中调用
init()
,该函数在程序启动时调用
#pragma
。否则,您可以在T2.h中声明的静态类/结构变量的构造函数中调用
init()
(最好在T2.cpp中声明)。@agg212:您误解了头保护是什么。它们仅防止在单个翻译单元内多次处理标题。它们不会阻止标题作为一个整体在项目中被多次处理。您可以让多个.cpp文件(in)直接包含T2.h,因此每次都会重新处理它,从而多次调用
init()。对于您正在尝试的内容,听起来您需要在程序启动时调用一个singleton来注册您需要的所有内容。嗯,最终会有人包含这些头,对吗?库可能只是标题,但使用库的程序不是。直到现在我才认为在这样的标题中调用方法是合法的。然而,在我看来,这仍然是个坏主意。您是否可以在T2的构造函数(或其他一些init方法)中调用
T1::init()
,并向T1添加一些逻辑以确保它实际上不会多次初始化?
#ifndef T1_H
#define T1_H

class T1 {
   static void init() {...}
   ...
};
#endif
#ifndef T2_H
#define T2_H

#include "T1.h"

class T2 {
   ...
};

T1::init();
#endif