Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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++ 访问另一个cxx文件中定义的静态阵列_C++_Arrays_Static_Extern - Fatal编程技术网

C++ 访问另一个cxx文件中定义的静态阵列

C++ 访问另一个cxx文件中定义的静态阵列,c++,arrays,static,extern,C++,Arrays,Static,Extern,我有一个链接到共享库的程序。此库包括一个RandomFile.cxx文件,该文件的数组定义如下: 静态双随机数组[]={0.1,0.2,0.3}; 在RandomFile.cxx的头文件RandomFile.hxx中,没有与randomArray相关的extern、getter或任何内容 在我的程序中,我想以某种方式访问这个数组 到目前为止,我已经尝试: //sizeOfRandomArray是通过计算元素来计算的。 int sizeOfRandomArray=3; //第一次尝试:未编译,因

我有一个链接到共享库的程序。此库包括一个RandomFile.cxx文件,该文件的数组定义如下:

静态双随机数组[]={0.1,0.2,0.3};
在RandomFile.cxx的头文件RandomFile.hxx中,没有与randomArray相关的extern、getter或任何内容

在我的程序中,我想以某种方式访问这个数组

到目前为止,我已经尝试:

//sizeOfRandomArray是通过计算元素来计算的。
int sizeOfRandomArray=3;
//第一次尝试:未编译,因为未定义对数组的引用
外部双随机数组[sizeOfRandomArray];
//第二次尝试:未编译,因为未定义对数组的引用
外部“C”双随机数组[sizeOfRandomArray];
//第三次尝试:未编译,因为未定义对数组的引用
外部“C++”双随机数组[sizeOfRandomArray];
//第四次尝试:编译,但我没有得到实际值
外部“C”{
双随机数组[sizeOfRandomArray];
}
//第五次尝试:编译,但我没有得到实际值
外部“C++”{
双随机数组[sizeOfRandomArray];
}
//第六次尝试:编译并工作,但我用整个RandomFile.cxx文件重载代码。
#包括“RandomFile.cxx”
我不能(不想)更改RandomFile.cxx,因为它是名为的大型库的一部分

是否有任何可能的方法可以做到这一点,而无需在代码中包含cxx文件或复制阵列


提前感谢。

一个用
static
定义的变量(在某种程度上)对该翻译单元是“私有的”

没有其他转换单元可以访问该变量

因此,不可能直接访问该阵列


作为一个工作,你可能会考虑创建一个类,并将数组放在类中。然后可以使用成员函数以间接方式访问该类。如果您只需要数组的一个实例(而不是类的每个对象实例一个实例),那么您可以将其设置为类中的

static

在一个变量中定义的
static
在某种程度上是该转换单元的“私有”变量

没有其他转换单元可以访问该变量

因此,不可能直接访问该阵列


作为一个工作,你可能会考虑创建一个类,并将数组放在类中。然后可以使用成员函数以间接方式访问该类。如果您只需要数组的一个实例(而不是类的每个对象实例一个),则可以将其设置为类中的

静态

如果不修改RandomFile.cxx,您无法访问该对象。 只需删除RandomFile.cxx文件中的
静态
说明符,并在公共头文件RandomFile.hxx或需要访问的目标翻译单元中将对象声明为
extern
。这使对象具有外部链接的静态持续时间:

RandomFile.hxx:

 constexpr int sizeOfRandomArray=3
 extern double randomArray[sizeOfRandomArray];
RandomFile.cxx:

 double randomArray[sizeOfRandomArray] {1,2,3};
见:

请记住,如果在声明中遗漏了大小,则除了RandomFile.cxx之外,没有其他转换单元会知道数组大小

干杯,
FM.

如果不修改RandomFile.cxx,您无法访问该对象。 只需删除RandomFile.cxx文件中的
静态
说明符,并在公共头文件RandomFile.hxx或需要访问的目标翻译单元中将对象声明为
extern
。这使对象具有外部链接的静态持续时间:

RandomFile.hxx:

 constexpr int sizeOfRandomArray=3
 extern double randomArray[sizeOfRandomArray];
RandomFile.cxx:

 double randomArray[sizeOfRandomArray] {1,2,3};
见:

请记住,如果在声明中遗漏了大小,则除了RandomFile.cxx之外,没有其他转换单元会知道数组大小

干杯,
FM.

将cxx包含在代码中是个坏主意,不要这样做……共享库必须具有函数。他们中有人访问并返回此阵列吗?有些人访问它(在cxx中),但没有人返回它。将cxx包含到代码中是个坏主意,不要这样做…共享库必须具有函数。他们中有人访问并返回此阵列吗?有些人访问它(在cxx中),但没有人返回它。我不想这样做,因为这是一个大库,我不是它的作者。我不想这样做,因为它是一个大库,我不是它的作者。