l30*_*1t0 4 c c++ global-variables extern
我有一个在运行时定义的整数常量.此常量需要在全局和多个源文件中可用.我目前有以下简化情况:
ClassA.h 声明 extern const int someConstant;
ClassA.cpp使用someConstant在某些时候.
Constants.h 声明 extern const int someConstant;
main.cpp包括ClassA.h和Constants.h声明const int someConstant,并在main()尝试someConstant在运行时初始化为实际值的某个时刻.
这可以完美地使用一个char *常量,我用它来使程序的名称在所有文件中全局可用,并且它的声明和定义与我试图在这里声明和定义的那个完全相同,但我无法使用它一个int.
我得到的第一个error: uninitialized const ‘someConstant’ [-fpermissive]是我正在宣布它的行main.cpp,后来我得到了一个error: assignment of read-only variable ‘someConstant’我认为是因为someConstant默认初始化开始.
有没有办法做我想在这里实现的目标?提前致谢!
编辑(根据@WhozCraig的要求):相信我:它是不变的.我没有发布MCVE的原因是由于三个原因:这是一个任务,源是西班牙语,因为我真的想把问题保持为一般(并且可重复使用).我开始写这个例子,中途它打击了我不是最清楚的问题.我会再试一次解释.
我被要求建立一个程序,创建一个进程,反过来产生两个孩子(反过来会产生两个孩子,依此类推).该程序将生成的代数视为单个参数.基本上创建一种二进制过程树.每个过程都必须提供有关他自己,他的父母,与原始过程的关系以及他的孩子(如果有的话)的信息.
因此,在上面的示例中,ClassA实际上是一个包含有关进程信息的类(PID,PPID,子PID,与原始进程的关系程度等).对于每个fork我创建这个类的新实例,所以我可以"保存"这些信息并将其打印在屏幕上.
当我定义与原始进程的关系时,我需要知道在调用程序时使用的参数,以检查此进程是否没有子进程(以更改该特定进程的输出).这就是我需要的常数main:产生的世代数,树的"深度".
编辑2:我将不得不道歉,这是漫长的一天,我没有直接思考.我将源代码从C切换到C++只是为了使用一些OO功能而完全忘记了在OO范例内部思考.我刚刚在解释这个问题时意识到我可以在我的类中用一个静态/类变量来解决这个问题(用原始进程初始化),它可能不是常量(虽然在语义上是这样)但它应该可以工作,对吧?此外,我还意识到我可以用一些不可能的PID值初始化上一代的孩子,并用它来检查它是否是最后一代.
对不起伙计们,谢谢你们的帮助:看来这个问题是有效的,但一直都是错误的问题.新口头禅:走下电脑放松一下.
但只是回顾并保持重点,绝对不可能创建一个在运行时在C++中定义的全局常量,就像@Jerry101所说的那样?
在C/C++中,const是在编译时定义的.它不能在运行时设置.
您可以const char *xyz;在运行时设置a的原因是,它声明了一个指向const char的非const指针.棘手的语言.
因此,如果你想要一个可以在main()中确定并且之后没有改变的int,你可以编写一个getter int xyz(),它返回一个在main()或getter中初始化的静态值.
(顺便说一句,在多个头文件中声明相同的extern变量并不是一个好主意.)