C++ 声明包含类型的对象时出错
如果我在头文件中声明了一个对象,就会出现编译错误。但是,我可以在应用程序的setup()方法中构造它,只需调用C++ 声明包含类型的对象时出错,c++,constructor,C++,Constructor,如果我在头文件中声明了一个对象,就会出现编译错误。但是,我可以在应用程序的setup()方法中构造它,只需调用analyzera(44100.,“A”,200) 如果我这样构造它,如何保持指向它的指针?一旦构造函数调用超出范围,对象就不可访问了吗? 或者,是否有其他方法可以获取此对象的实例? (我习惯于在头文件中放入类似于analyzera;的内容,然后在cpp中放入A=newanalyzer(44100.,“A”,200);。但这不会编译。) Analyzer.hh: class Analyz
analyzera(44100.,“A”,200)代码>
如果我这样构造它,如何保持指向它的指针?一旦构造函数调用超出范围,对象就不可访问了吗?
或者,是否有其他方法可以获取此对象的实例?
(我习惯于在头文件中放入类似于analyzera;
的内容,然后在cpp中放入A=newanalyzer(44100.,“A”,200);
。但这不会编译。)
Analyzer.hh:
class Analyzer {
public:
/// constructor
Analyzer(double rate, std::string id, std::size_t step = 200);
};
Analyzer.cc:
Analyzer::Analyzer(double rate, std::string id, std::size_t step):
m_step(step),
m_rate(rate),
m_id(id),
m_window(FFT_N),
m_bufRead(0),
m_bufWrite(0),
m_fftLastPhase(FFT_N / 2),
m_peak(0.0),
m_oldfreq(0.0)
{
/* ... */
}
第h页:
#include "Analyzer.hh"
class testApp : public ofSimpleApp{
public:
// *This line gives compilation error
// "No matching function for call to Analyzer::Analyzer()"
Analyzer A;
}
testApp.cpp:
void testApp::setup(){
// *This line compiles, but how will I access
//this object outside of current scope?*
Analyzer A(44100., "a", 200);
}
A分析仪代码>->分析器*A代码>和分析仪A(44100.,“A”,200)代码>->A=新分析仪(44100.,“A”,200)代码>您可以初始化
testApp as的构造函数中
testApp:testApp():A(44100., "a", 200){
//testApp constructor.
}
你需要从头开始学习C++。你试图从java或C++语言中引用语义,而C++中不存在这些语义。你需要一个C++方法。
A分析仪代码>是一个值。它是直接构建的。如果使用成员变量,则必须使用初始值设定项列表构造它
testApp::testApp()
: A( args ) {}
启用函数局部作用域时,通常会返回对象的副本,或使用自己拥有的智能指针(如shared_ptr
)来保存对象。在C++中,除非你真正需要动态生存期,否则你不需要使用动态分配——如果需要的话,你可以别名为堆栈变量。