我正在学习如何使用std :: vector并希望访问其值和函数.我在另一个名为spectrum的对象中有一个矢量对象.现在,当我尝试使用.capacity确定向量的容量时,如果我只声明向量,它就可以正常工作.但是当我在另一个对象中声明向量时,我会遇到语法错误.
错误:
test.c++:36: error: base operand of ‘->’ has non-pointer type ‘Spectrum’
Run Code Online (Sandbox Code Playgroud)
如下所述, - >应该是一个点.
我想要的是确定容器的容量,即使它现在编译它给出结果0而不是我期望的8.
代码:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
/* spectrum */
class Spectrum{
public:
float oct;
vector<float> band;
float total(){
int k;
float lpow;
// logarithmic summation
for(k = 0; k < oct; k++){
lpow = lpow + pow(10, band[k]);
}
return(10*log10(lpow));
}
Spectrum(int max_oct = 3){
oct = max_oct;
cout << "max oct = " << max_oct << endl;
vector<float> band(max_oct); //create vector/array with max_oct bands
cout << (int)band.capacity() << endl;
}
};
int main()
{
//does not work in a class
Spectrum input(8);
cout << (int)input->band.capacity() << endl;
//does work outside of a class
vector<float> band(8);
cout << (int)band.capacity() << endl;
}
Run Code Online (Sandbox Code Playgroud)
这条线vector<float> band(max_oct);
不符合你的想法.
它定义了一个band
在Spectrum构造函数范围内调用的自动变量.它不触及也称为的成员变量band
:实际上它"隐藏"它,因此band
构造函数中的任何后续引用都引用自动变量,而不是成员变量(您可以访问它this->band
).
你想要的是:
Spectrum(int max_oct = 3) : oct(max_oct), band(max_oct) {
}
Run Code Online (Sandbox Code Playgroud)
或者(不太好,因为它构造一个空向量然后调整它的大小,而不是在第一个位置构造它正确的大小):
Spectrum(int max_oct = 3) {
oct = max_oct;
band.resize(max_oct);
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我认为你可能会混淆size
和capacity
矢量(不确定你说的是什么).单arg构造函数vector
创建具有指定大小的向量.所以如果你还没有,你应该期望容量为8 或更多,而不是8.
[编辑:在回答你的下一个问题,你需要初始化lpow
中total()
:float lpow = 0;
]
归档时间: |
|
查看次数: |
800 次 |
最近记录: |