Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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/1/typescript/8.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++_Objective C_Memory_Pointers_Vector - Fatal编程技术网

C++ 简单指针问题(在不同类之间共享向量)

C++ 简单指针问题(在不同类之间共享向量),c++,objective-c,memory,pointers,vector,C++,Objective C,Memory,Pointers,Vector,我有一个类AudioDeviceManager,它通过引用将std::vector传递给AudioAnalyzer类 我希望其他对象能够访问这个向量(传递给AudioAnalyzer类)。为此,我在AudioAnalyzer类中创建了一个指针: std::vector<float> *pointer; 然而,我似乎无法从另一个类spectrum访问它 我用方法调用初始化这个spectrum类(fft_数据也是指向std::vector的指针) -(id)initWithDataVe

我有一个类AudioDeviceManager,它通过引用将std::vector传递给AudioAnalyzer类

我希望其他对象能够访问这个向量(传递给AudioAnalyzer类)。为此,我在AudioAnalyzer类中创建了一个指针:

std::vector<float> *pointer;
然而,我似乎无法从另一个类spectrum访问它 我用方法调用初始化这个spectrum类(fft_数据也是指向std::vector的指针)

-(id)initWithDataVec:(std::vector*)地址{
...
fft_数据=地址;
...
但是
NSLog(@“值:%i”,fft_数据);
返回0

写入`NSLog(@“value:%i”,&fft_data)将返回看似有效的地址。但这不是指针的地址吗


我不确定我的代码是否正确。我正在寻找一种在不同类之间“共享”单个向量的方法。理想情况下,一个类将收到指向该向量的指针,它们可以随时访问该向量,而不必有另一个类调用的函数。

您不能只传递(通过引用)同一个std::vector的同一个实例到所有需要它的类的构造函数?

这难道不会使我的设计紧密耦合吗?我有一个“谱”绘制当前播放音频的频谱显示的类…AudioAnalyzer必须了解该类,才能将其向量传递给其构造函数。是的,更好的方法是使用单独的生成器类/函数设置所有对象,并将正确的对象传递给从属对象的构造函数。这样,所有类都可以不必知道彼此的内部细节,也可以使用它在测试代码中传递对象的模拟/测试版本,以便于单元测试。这种技术称为依赖项注入,请尝试通过谷歌搜索。如何使用std::vector指针调用initWithDataVec?我建议您使用“%p”而不是“%I”对于NSLog格式的指针。std::vector*toData=[analyzer指针];spectrum=[[spectrum alloc]initWithDataVec:toData];
NSLog(@"%i", [self pointer]);
det->process(time, *[self pointer]);
- (id) initWithDataVec:(std::vector<float>*)address {
...
fft_data = address;
...