C++ C++;:使动态初始化的变量可用于其他.cpp文件
我有一个C++ C++;:使动态初始化的变量可用于其他.cpp文件,c++,C++,我有一个int vertexCount变量,它是通过读取loader.cpp上的文本文件来初始化的,我想将它提供给一个单独的model.cpp文件 我应该申报吗 外部垂直计数 关于model.cpp?还是在.h上 我要在您的.h中声明类似的内容: extern VertexCount *vertexCount; 然后在一个且仅一个.cpp文件(例如,“main.cpp”)中定义(分配空间): 我要在你的表格中声明类似的内容。h: extern VertexCount *vertexCount;
int vertexCount
变量,它是通过读取loader.cpp
上的文本文件来初始化的,我想将它提供给一个单独的model.cpp
文件
我应该申报吗
外部垂直计数
关于
model.cpp
?还是在.h
上 我要在您的.h中声明类似的内容:
extern VertexCount *vertexCount;
然后在一个且仅一个.cpp文件(例如,“main.cpp”)中定义(分配空间):
我要在你的表格中声明类似的内容。h:
extern VertexCount *vertexCount;
然后在一个且仅一个.cpp文件(例如,“main.cpp”)中定义(分配空间):
您正向声明
extern int vertexCount在适合该变量的标头中编码>,并在.cpp:int vertexCount中声明(即分配内存)代码>。您可以立即初始化它(int vertexCount=1;
),也可以稍后在包含代码的任何文件中的代码中进行初始化(当然,您需要包含头)
但是,在变量真正初始化之前,您有责任不访问它
你也可以考虑把变量放进一个类中,这将确保在构造函数或第一个访问中都有适当的初始化(你需要一个吸收器),或者在后台,等等。这种方式可能是最干净的。
< p>你向前声明<代码> ExtIn int ValtCtUnt;<在适合该变量的标头中编码>,并在.cpp:int vertexCount中声明(即分配内存)代码>。您可以立即初始化它(int vertexCount=1;
),也可以稍后在包含代码的任何文件中的代码中进行初始化(当然,您需要包含头)
但是,在变量真正初始化之前,您有责任不访问它
你也可以考虑把变量放进一个类中,这将确保在构造函数或第一个访问中都有适当的初始化(你需要一个吸气剂),或者在后台,等等。这种方式可能是最干净的。
它是如何“动态初始化”的?创建一个支持对数据执行的操作的类,并将数据存储保持在内部(如std::vector
等)。然后传递该类的一个实例进行操作。无论哪种方式,都没有区别。在model.cpp中,你可以声明extern int vertexCount,每个人都会很高兴。下面是龙:不管你怎么做,你怎么能确定model.cpp
只有在初始化完成后才会访问该值?在C++中,对于不同翻译单位之间的初始化顺序几乎没有保证。@艾伦:对于这样的保证,需要在一个类内移动自立变量,这将负责初始化。但对于小而简单的项目,像“好的,在代码完成之前我不应该碰这个变量”这样的方法是可以的。它是如何“动态初始化”的?我不会说上面的任何一个。创建一个支持对数据执行的操作的类,并将数据存储保持在内部(如std::vector
等)。然后传递该类的一个实例进行操作。无论哪种方式,都没有区别。在model.cpp中,你可以声明extern int vertexCount,每个人都会很高兴。下面是龙:不管你怎么做,你怎么能确定model.cpp
只有在初始化完成后才会访问该值?在C++中,对于不同翻译单位之间的初始化顺序几乎没有保证。@艾伦:对于这样的保证,需要在一个类内移动自立变量,这将负责初始化。但对于小而简单的项目,像“好的,在代码完成之前我不应该碰这个变量”这样的方法是可以的。谢谢,但我希望vertexCount是一个int(我意识到我没有写它,呵呵,我太习惯Python了),请解释一下为什么要将它声明为指针?是不是因为我的疏忽?是的,只是因为我的疏忽。听起来你想在.h标题中显示“extern int vertexCount”,在.cpp标题中显示“int vertexCount=0”。谢谢,但我想让vertexCount是一个int(我意识到我没有写它,呵呵,我太习惯Python了),请解释一下为什么你要将它声明为指针?是不是因为我的疏忽?是的,只是因为我的疏忽。听起来你希望在.h头中有“extern int vertexCount”,在.cpp中有“int vertexCount=0”。初始化它的.cpp应该实现声明为extern的头,对吗?@omgzor:其实没有必要,但这是通常的方式。当然,.cpp文件应该#包含
头文件(但我不确定它是否严格必要)。初始化它的.cpp应该实现声明为extern的头文件,对吗?@omgzor:实际上没有必要,但这是通常的方式。当然,.cpp文件应该#包含头文件(但我不确定是否严格必要)。