我的神经网络存在问题。 我将构成网络的节点存储在一个数组中,其大小在编译时通过调整设置(调整都是常量)。
代码工作正常,直到我决定将其拆分为多个文件,但即使使用extern声明,它仍然表示“数组绑定不是''令牌之前的整数常量”。
现在,这是设置: 在Network.h中:
struct Network {
Node nodes [MNETWIDTH] [MNETLENGTH];
}
在Network.cpp中:
Network::Network () {
Node nodes [MNETWIDTH] [MNETLENGTH];
}
调整在Misc.h中声明(包含在Network.h中):
//////////Genetics Tweaks
extern int const MREPS;
extern int const BEINGSPER;
extern int const MUTRATE
extern double const BTOKEEP;
extern int const DNARANGE;
////////////Genetics Tweaks
////////////Network Tweaks
extern const int MNETWIDTH;
extern const int MNETLENGTH;
////////////End Network Tweaks
然后在main.cpp中定义它们
节点定义需要在标题中,因此它可以被源文件访问,但是常量调整不能在标题中,因为我得到多个声明错误。我认为将它们声称为extern会告诉它在其他地方找到恒定值,但显然不是。
我尝试将它从数组更改为2D Vector,但这变成了一个残酷的混乱,所以如果我能让它工作,我真的很喜欢它。
我尝试在类外的Network.h中将节点声明为extern而没有任何大小的参数,然后在Network.cpp中定义它,但我仍然得到相同的错误。 它似乎需要在同一个文件中使用常量定义,但是在几个文件中都需要const变量和节点。
这里有任何帮助吗?
谢谢
答案 0 :(得分:1)
要用作常量表达式,必须定义常量变量,而不仅仅是声明。假设您要从多个翻译单元中使用它,请删除extern
以使其内部链接(因此可以在需要它的任何单元中定义),并添加初始化程序以提供值。
此外,从构造函数中删除本地数组声明。我不确定你想要做什么,但它没有做任何有用的事情。
常量调整不能在标题中,因为我得到多个声明错误
那是因为extern
给了他们外部联系,使他们服从一个定义规则。
我认为将它们声明为extern会告诉它在其他地方找到常数值
它告诉编译器该值在运行时可用;但是没有为编译器提供定义。需要定义才能在常量表达式中使用该值。