我想使用在参数MainWindow
中已经有另一个名称空间void recognized(RecoResult *result)
的朋友函数LapsAPI::RecoResult
来访问类result
的私有对象。如何访问此朋友功能中的Ui::MainWindow *ui
?
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "main.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
friend void recognized(RecoResult *result);
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "main.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
void MainWindow::on_pushButton_clicked()
{
// Iniciando classe de reconhecimento
SREngine* en;
en = new SREngine("clara.jconf");
// Inicio do reconhecimento de voz
en->setOnRecognizeAction(&recognized);
en->startRecognition();
printf("Ola!\n");
printf("Reconhecendo\n");
sleep(100);
en->stopRecognition();
}
MainWindow::~MainWindow()
{
delete ui;
}
void recognized(RecoResult *result){
if(result->getConfidence() > TRUST){
cout << result->getUterrance() << " Confiança " << result->getConfidence() << endl;
string uterrance = "";
float confidence = 0.0;
uterrance = result->getUterrance();
confidence = result->getConfidence();
cout << "MENSAGEM RECONHECIDA SEM FILTROS: " << uterrance << " " << confidence << "\n" << endl;
ui->textBrowser->append("RECONHECIDA");
}
}
ERROR
/home/dayannefernandes/GitHub/clara-interface/clara-ui/mainwindow.cpp:44: error: 'ui' was not declared in this scope
ui->textBrowser->append("MENSAGEM RECONHECIDA");
^
答案 0 :(得分:0)
recognized
是一个免费功能。虽然您已授予其MainWindow
成员姓名的访问权限,但它不是MainWindow
的成员,并且没有与该函数隐式关联的MainWindow
个对象。
通常要修复此问题,您需要为该函数提供另一个参数。但是,由于您的函数被用作回调函数并且它必须具有固定签名,因此您无法在此处执行此操作。
如果希望recognized
中的代码能够影响任何对象,则必须使用全局变量。例如,您可以拥有一个MainWindow
的全局实例,或一个指向当前调用startRecognition
函数的实例的全局指针(并确保您不要从多个线程中调用它...)
(这不是LapsAPI中的一个非常好的设计,但你不能改变它,所以你必须使用它。)
答案 1 :(得分:-1)
recognized()
不是MainWindow
方法。您没有将MainWindow
实例的指针或引用传递给recognized()
。难怪编制者抱怨未定义的符号。