【发布时间】:2016-11-04 03:55:18
【问题描述】:
我正在努力将一些处理从 C++ 驱动程序转移到我工作环境中的类中的新方法。我已经开始研究该方法,但是在尝试从新编写的方法调用类中存在的其他对象相关方法时遇到问题。以下是部分代码:
bool resample_edf(VVectorDouble& sigin_a, VVectorDouble& sig_out_a,
long out_freq_a) {
// display debugging information
//
if (debug_level_d >= Edf::LEVEL_DETAILED) {
fprintf(stdout, "Edf::resample_edf(): starting resample/n");
}
// get the labels in the file
//
char* labels[Edf::MAX_NCHANS];
long num_channels = Edf::get_labels(labels);
long num_samples = (long) Edf::get_duration() * Edf::get_sample_frequency();
...
get_labels(labels)、get_duration() 和 get_sample_frequency() 方法都是我正在使用的 Edf 类的方法,但在尝试编译时出现此错误。
edf_01.cc:2240:45: error: cannot call member function ‘long int Edf::get_labels(char**)’ without object
long num_channels = Edf::get_labels(labels);
^
edf_01.cc:2242:47: error: cannot call member function ‘double Edf::get_duration()’ without object
long num_samples = (long) Edf::get_duration() * Edf::get_sample_frequency();
所有方法都是公共方法,但它们使用的一些变量在类中是受保护的。
我不确定如何解决此问题,但我会继续研究。谢谢你的帮助。如果需要更多信息,请告诉我。
编辑:我想有一些误解,所以我会提供更多信息。
调用此方法的实用程序中已存在 Edf 对象。该实用程序目前看起来像这样:
// local include files
//
#include <Edf.h>
...
int main(int argc, const char** argv) {
...
// create an Edf object
//
Edf edf(Edf::LEVEL_NONE);
// resample the signal
//
if (!edf.resample_edf(sig_in, sig_out, out_freq)) {
fprintf(stdout, " **> nedc_resample_edf: error resampling signal\n");
return((status = -1))
}
...
resample_edf 方法是 edf 对象中的一个方法。现在,在该方法中,我希望能够从对象调用其他方法,但是这样做会出错。在此方法中重新实例化 edf 对象对我没有帮助。我尝试了多种方法,但没有任何效果。
我最初没有包含该实用程序的运行方式,因为该类的编译与该实用程序无关。问题来自该方法如何从同一对象调用其他方法。 Edf 类非常大,因此很难为您提供全部内容。
如果原帖不清楚,请见谅。
【问题讨论】:
-
创建
Edf的实例?或者声明函数static?只是列出一些方法:) -
Find a beginners book 并重新学习类和对象之间的交互方式以及类和对象之间的区别。