在此范围内未声明"数据"
'data' was not declared in this scope
我正在C++年实现Goertzel算法,到目前为止我已经得到了:
#include <iostream>
#include <fstream>
#include <string>
#include <math.h>
const double pi = 3.14159;
class digitalFilter{
private:
int k,i;
float temp;
float scalingFactor;
float floatnumSamples;
float omega,sine,cosine,coeff,q0,q1,q2,magnitude,real,imag;
int const static limit = 205;
public:
digitalFilter();
void readDataFromFile();
float goertzel_mag(int numSamples,int TARGET_FREQUENCY,int SAMPLING_RATE, float* data);
};
digitalFilter::digitalFilter(){
float* data = new float[limit];
}
void digitalFilter::readDataFromFile(){
//get 205 values from txt file and store this in an array
std::ifstream dataFile ("data_files/datad.txt");
if (dataFile.is_open()){
for (int i = 0; i < limit; i++){
dataFile >> temp;
data[i] = temp;
}
dataFile.close();
}else{
std::cout << "Unable to open filen";
}
}
float digitalFilter::goertzel_mag(int numSamples,int TARGET_FREQUENCY,int SAMPLING_RATE, float* data){
scalingFactor = numSamples / 2.0;
floatnumSamples = (float) numSamples;
k = (int) (0.5 + ((floatnumSamples * TARGET_FREQUENCY) / SAMPLING_RATE));
omega = (2.0 * pi * k) / floatnumSamples;
sine = sin(omega);
cosine = cos(omega);
coeff = 2.0 * cosine;
q0=0;
q1=0;
q2=0;
for(int i = 0; i < numSamples; i++)
{
q0 = coeff * q1 - q2 + data[i];
q2 = q1;
q1 = q0;
}
// calculate the real and imaginary results
// scaling appropriately
real = (q1 - q2 * cosine) / scalingFactor;
imag = (q2 * sine) / scalingFactor;
magnitude = sqrtf(real*real + imag*imag);
std::cout << "a" << TARGET_FREQUENCY << " = " << magnitude << std::endl;
return magnitude;
}
int main()
{
digitalFilter ObjOne;
//compute amplitude magnitude of DFT
ObjOne.readDataFromFile();
ObjOne.goertzel_mag(205,697,8000,data);
ObjOne.goertzel_mag(205,770,8000,data);
ObjOne.goertzel_mag(205,852,8000,data);
ObjOne.goertzel_mag(205,941,8000,data);
ObjOne.goertzel_mag(205,1209,8000,data);
ObjOne.goertzel_mag(205,1336,8000,data);
ObjOne.goertzel_mag(205,1477,8000,data);
ObjOne.goertzel_mag(205,1633,8000,data);
return 0;
}
但是我得到这些愚蠢的错误代码:
goertzel_mag-v3.cpp: In member function 'void digitalFilter::readDataFromFile()':
goertzel_mag-v3.cpp:41:4: error: 'data' was not declared in this scope
goertzel_mag-v3.cpp: In function 'int main()':
goertzel_mag-v3.cpp:85:35: error: 'data' was not declared in this scope
我完全迷路了,为什么我的成员函数readDataFromFile()
找不到我的数组data[]
?似乎构造函数构建了数组,然后在程序离开构造函数后销毁了它??如何修复这些看似愚蠢的错误?
digitalFilter::digitalFilter(){
float* data = new float[limit];
}
退出构造函数后,data
数组将不复存在。使其成为类成员变量或全局变量以保留它。
将 float *data 初始化为成员函数将解决第一个问题。因为它在构造函数中初始化,并且仅适用于该块并且超出范围
对于主零件,一旦使其成为成员函数,就使用该对象访问它。例如:obj.data
相关文章:
- #ifdef和未声明的标识符
- 未声明的标识符编译暗黑破坏神 2 程序"muleview"
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 在气泡排序程序中未声明错误功能
- 我在范围内未声明的错误类有问题
- 使用未声明的标识符"sqrt"?
- 我包含了<winuser.h>,但编译器在MonitorFromWindow上抛出"未声明"
- 对类 (C++) 中的私有变量使用未声明的标识符
- 我的代码中有错误,未声明的标识符
- 未定义的标识符/未声明
- 错误:在 C++ 'std'使用未声明的标识符
- 在编译器之前检测未声明的标识符
- 使用未声明的标识符'temp'
- 使用未声明的标识符"yylex"和"yyin"?
- 使用"class"关键字,后跟未声明的标识符
- 未声明的标识符错误,但变量定义正确 (?)
- 数据未插入 MySQL databae
- 错误:非静态数据成员的使用无效,在此范围内未声明变量
- 在此范围内未声明"数据"