首先,我说过我已经阅读了有关如何初始化全局变量或如何正确实现全局常量的类似主题。但是,这些问题并没有真正帮助我解决我的具体问题,也没有咨询任何其他资源。问题如下。
我(必须)在头文件中声明header.ha变量,该变量必须是常量,并由main.cpp中的main函数以及另一个文件中定义的其他函数functions.cpp(先前在header中声明的)使用。H)。问题在于此常量是运行时常量,其值由用户指定。我应该如何进行?
我认为我最好的方法是按照以下步骤做。在header.h
中// Header guard
namespace n
{
// Some forward declarations
extern const double mu; // The constant that should be initialized by the user.
// Some other declarations
}
然后进入functions.cpp
#include "header.h"
namespace n
{
// Some definitions here
double function_that_uses_mu(double a, double b)
{
// Some code using mu
return somedouble;
}
// Some other definitions
}
final main.cpp
#include "header.h"
#include <iostream>
int main()
{
// Some code
double value_of_mu{};
std::cin >> value_of_mu;
// Validity check
extern const double n::mu{ value_of_mu };
// More code
return 0;
}
问题是由于error: ‘mu’ has both ‘extern’ and initializer
的事实,编译失败。但是,如果我尝试mu = value_of_mu
,显然会得到一个错误,因为我将分配给const值(而不是对其进行初始化)。因此,我不知道如何继续进行,或者我的代码出了什么问题。我必须遵守两个强制性事实:
函数/全局常量定义,函数/全局常量声明和main必须在上述三个文件中拆分。
mu被定义为三个文件共享的常量。
这可能吗?怎么样?
初始化变量时,不能指定extern
。应该可以这样工作: