C++ 访问另一个cxx文件中定义的静态阵列
我有一个链接到共享库的程序。此库包括一个RandomFile.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; //第一次尝试:未编译,因
静态双随机数组[]={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中),但没有人返回它。我不想这样做,因为这是一个大库,我不是它的作者。我不想这样做,因为它是一个大库,我不是它的作者。