Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;数组绑定在';]之前不是整数常量';代币;使用多个文件时_C++_Arrays_Linker Errors - Fatal编程技术网

C++ &引用;数组绑定在';]之前不是整数常量';代币;使用多个文件时

C++ &引用;数组绑定在';]之前不是整数常量';代币;使用多个文件时,c++,arrays,linker-errors,C++,Arrays,Linker Errors,我的神经网络有问题。 我将组成网络的节点存储在一个数组中,数组的维度是在编译时通过调整来设置的(调整都是常量) 代码运行良好,直到我决定将其拆分为多个文件,但即使使用extern声明,它仍然表示“数组绑定在']'标记之前不是整数常量” 现在,这是设置: 在Network.h中: struct Network { Node nodes [MNETWIDTH] [MNETLENGTH]; } //////////Genetics Tweaks extern int const MREPS; ext

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

代码运行良好,直到我决定将其拆分为多个文件,但即使使用extern声明,它仍然表示“数组绑定在']'标记之前不是整数常量”

现在,这是设置: 在Network.h中:

struct Network {
Node nodes [MNETWIDTH] [MNETLENGTH];
}
//////////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
在Network.cpp中:

Network::Network () {
Node nodes [MNETWIDTH] [MNETLENGTH];
}
调整在Misc.h(包含在Network.h中)中声明:

然后在main.cpp中定义它们

节点定义需要在头中,以便源文件可以访问它,但常量调整不能在头中,因为这样会出现多个声明错误。我认为将它们声明为extern会告诉它在其他地方找到常量值,但显然不是

我试着把它从一个数组改成一个2D向量,但结果变成了一团乱麻,所以如果我能让它工作的话,我真的很喜欢它

我尝试在类之外声明Network.h中的extern节点,但没有任何大小参数,然后在Network.cpp中定义它,但仍然得到相同的错误。 它似乎需要在使用它的同一个文件中使用常量定义,但在几个文件中都需要常量变量和节点

有人帮忙吗


谢谢

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

另外,从构造函数中删除本地数组声明。我不知道你想要它做什么,但它没有任何用处

常量调整不能在标题中,因为这样会出现多个声明错误

这是因为
extern
给了它们外部链接,使它们服从于一个定义规则

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


它告诉编译器该值在运行时可用;但不向编译器提供定义。在常量表达式中使用值需要定义。

您的构造函数没有做任何事情。@chris上面的示例只是我尝试过的一种配置。我知道它在页眉和页眉上是一样的。cpp@AndreyT是的,这看起来是同一个问题,但实际上没有什么帮助。其中给出的解决方案是将它们放在同一个文件中,但这不是一个选项。我需要对多个文件同时使用数组和常量调整。我删除了extern,并正常初始化了它,但现在我得到了多个定义warnings@Carcigenicate如果你已经删除了 ExtNe>代码,那么就不应该有多个定义错误,除非编译器认为它是编译C而不是C++。或者你不止一次在没有防护罩的情况下包含标题。您可以将
extern
替换为
static
,以双重确保它具有内部链接,但这不是必需的。MNETWIDTH和MNETLENGTH在Misc.h(带防护)中定义为int const MNETWIDTH=5;。Misc.h随后包含在其他几个文件中。试图编译它会导致一个MD错误。突然,它编译正确了。我想可能是IDE(C4Droid)。我用前台的Misc.h文件编译它,它给了我一个错误,但是当我切换到前台的main.cpp时,它运行得很好。哦,谢谢你的帮助。非常感谢。