C++ 声明包含类型的对象时出错

C++ 声明包含类型的对象时出错,c++,constructor,C++,Constructor,如果我在头文件中声明了一个对象,就会出现编译错误。但是,我可以在应用程序的setup()方法中构造它,只需调用analyzera(44100.,“A”,200) 如果我这样构造它,如何保持指向它的指针?一旦构造函数调用超出范围,对象就不可访问了吗? 或者,是否有其他方法可以获取此对象的实例? (我习惯于在头文件中放入类似于analyzera;的内容,然后在cpp中放入A=newanalyzer(44100.,“A”,200);。但这不会编译。) Analyzer.hh: class Analyz

如果我在头文件中声明了一个对象,就会出现编译错误。但是,我可以在应用程序的setup()方法中构造它,只需调用
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++中,除非你真正需要动态生存期,否则你不需要使用动态分配——如果需要的话,你可以别名为堆栈变量。