常量的头文件声明及源文件应用有关问题(急)
常量的头文件声明及源文件应用问题(急)
c++ primer:如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义。该const变量应该在一个源文件中定义并初始化,应在头文件中为它添加extern声明,以使其能被多个文件共享。我写了几个文件请教大家:
头文件1 global.h
extern const int N;
源文件1 getN.cpp
int getN()
{ return 100;//我需要从txt内读入N,这里简化}
const int N=getN();
源文件2 main.cpp
#include "global.h"
void main()
{double a[N];
}
编译时出现错误,似乎是因为数组a的长度N不是常量!
请问 我如何才能用从txt文件中读入的N来定义数组长度?急求!
------解决方案--------------------
const需要在编译时就能确定其值,“const int N=getN()”是运行时得到其值,不能通过编译的
可以用动态数组:double a*= new double[n];
------解决方案--------------------
或者使用vector,可以不用先读N 直接往vector里写,然后通过它的size方法可以得到数组大小
------解决方案--------------------
常量表达式和const不是一回事。真正的常量是编译时就确定的。不用常量表达式初始化就不是真正意义上的常量了,只不过是只读对象而已。
你要用真正的常量,就用支持constexpr的编译器强制不允许非常量表达式的初始化(之后可以放心用);或者就std::integral_constant代替const对象再整成模板;或者就老老实实在头文件里面定义非extern的const对象(默认internal linkage不会违反ODR报多重定义的链接错误)。
运行时txt文件中读入的N不可能是编译时确定常量。用new动态分配吧。
c++ primer:如果const变量不是用常量表达式初始化,那么它就不应该在头文件中定义。该const变量应该在一个源文件中定义并初始化,应在头文件中为它添加extern声明,以使其能被多个文件共享。我写了几个文件请教大家:
头文件1 global.h
extern const int N;
源文件1 getN.cpp
int getN()
{ return 100;//我需要从txt内读入N,这里简化}
const int N=getN();
源文件2 main.cpp
#include "global.h"
void main()
{double a[N];
}
编译时出现错误,似乎是因为数组a的长度N不是常量!
请问 我如何才能用从txt文件中读入的N来定义数组长度?急求!
------解决方案--------------------
const需要在编译时就能确定其值,“const int N=getN()”是运行时得到其值,不能通过编译的
可以用动态数组:double a*= new double[n];
------解决方案--------------------
或者使用vector,可以不用先读N 直接往vector里写,然后通过它的size方法可以得到数组大小
------解决方案--------------------
常量表达式和const不是一回事。真正的常量是编译时就确定的。不用常量表达式初始化就不是真正意义上的常量了,只不过是只读对象而已。
你要用真正的常量,就用支持constexpr的编译器强制不允许非常量表达式的初始化(之后可以放心用);或者就std::integral_constant代替const对象再整成模板;或者就老老实实在头文件里面定义非extern的const对象(默认internal linkage不会违反ODR报多重定义的链接错误)。
运行时txt文件中读入的N不可能是编译时确定常量。用new动态分配吧。