我正在尝试使用两个(实际上,但这并不重要)源代码编译代码。在其中一个中,我声明了一个可变大小的数组:
const int number_of_equidistant = spike_location[number_of_spikes-1];
point_type* equidistant = NULL;
equidistant = new point_type[number_of_equidistant];
只要我在我声明它的同一源文件中使用它,它就可以正常工作。但是,我想在其他地方访问它(此时只是为了打印内容以检查它是否应该执行的操作)以及动态大小导致问题的地方(我尝试声明大小)作为extern const int但是没有用)。有没有一种解决方法,或者这是一种特别愚蠢的方法,应该以某种方式以不同方式完成吗?
特定的错误报告是:
debug.cpp: In function ‘void debug_initialization()’:
debug.cpp:71:56: error: storage size of ‘equidistant’ isn’t constant
extern point_type equidistant[number_of_equidistant];
在debug.cpp中,数组和大小声明如下:
extern const int number_of_equidistant;
extern point_type equidistant[number_of_equidistant];
我当然可以将其更改为列表(或堆或类似的东西),但我宁愿能够通过索引轻松访问数据。我不知道任何其他方法,所以我欢迎任何建议:)
答案 0 :(得分:1)
你必须保持一致:
point_type* equidistant = NULL;
这表示equidistant
是指针。
extern point_type equidistant[number_of_equidistant];
这表示equidistant
是一个数组。选择一个并坚持下去。
答案 1 :(得分:0)
当您使用new分配时,在此之后总是使用指针,您正在使用
extern point_type equidistant[number_of_equidistant];
你应该在哪里使用
extern point_type* equidistant;
a.cpp:
#include <iostream>
extern const int number_of_equidistant;
extern double* equidistant;
extern void debuginit();
int main()
{
debuginit();
for(size_t ii=0; ii<number_of_equidistant; ii++) {
std::cerr << ii << std::endl;
}
}
b.cpp:
extern const int number_of_equidistant = 100;
double equidistant[number_of_equidistant];
void debuginit()
{
for(int ii=0; ii<number_of_equidistant; ii++)
equidistant[ii] = ii;
}
我建议你改用矢量。将长度和指针存储在一起才有意义,特别是对于全局:
我在a.cpp:
#include <vector>
const int number_of_equidistant = 100;
std::vector<double> equidistant(number_of_equidistant);
void debuginit()
{
for(int ii=0; ii<equidistant.size(); ii++)
equidistant[ii] = ii;
}
和b.cpp:
#include <vector>
#include <iostream>
extern std::vector<double> equidistant;
extern void debuginit();
int main()
{
debuginit();
for(size_t ii=0; ii<equidistant.size(); ii++) {
std::cerr << ii << std::endl;
}
}
最好在main()中声明你的变量然后根据需要传递它,因为如果你知道它来自哪个变量(参数列表)而不是某个全局变量,那么查看变量就不那么容易了。不知道是否有其他人修改过。