“使用多个文件时,数组绑定不是']'标记之前的整数常量

时间:2013-12-23 18:34:45

标签: c++ arrays linker-errors

我的神经网络存在问题。 我将构成网络的节点存储在一个数组中,其大小在编译时通过调整设置(调整都是常量)。

代码工作正常,直到我决定将其拆分为多个文件,但即使使用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变量和节点。

这里有任何帮助吗?

谢谢

1 个答案:

答案 0 :(得分:1)

要用作常量表达式,必须定义常量变量,而不仅仅是声明。假设您要从多个翻译单元中使用它,请删除extern以使其内部链接(因此可以在需要它的任何单元中定义),并添加初始化程序以提供值。

此外,从构造函数中删除本地数组声明。我不确定你想要做什么,但它没有做任何有用的事情。

  

常量调整不能在标题中,因为我得到多个声明错误

那是因为extern给了他们外部联系,使他们服从一个定义规则。

  

我认为将它们声明为extern会告诉它在其他地方找到常数值

它告诉编译器该值在运行时可用;但是没有为编译器提供定义。需要定义才能在常量表达式中使用该值。