Как использовать член метода класса внутри другого метода того же класса?

#c #qt5.7

#c #qt5.7

Вопрос:

как я могу использовать именной файл члена методов setName / getName для установки имени выходного файла метода SaveFile. QString nomeFile является закрытым внутренним файлом.h Файл, который я создал, возвращает следующую ошибку

QFSFileEngine::открыть: имя файла не указано

dialog.cpp

 nomeFile="abcd"; // private: QString nomeFile; in dialog.h

file ogg1;
ogg1.setName(nomeFile);
 

f.cpp

 file ogg2;
ogg2.saveFile();
 

file.cpp

 /* COSTRUTTORE */
a::a()
{

}

/* DISTRUTTORE */
a::~a()
{

}

void a::setName(QString _nomeFile)
{
    nomeFile="C:\Users\MDN\Documents\A\"   _nomeFile   ".txt";
    if(!nomeFile.isEmpty())         
    {
        QFile::remove(nomeFile);    
    }
}

QString a::getName()
{
    return nomeFile;
}

void a::saveFile()
{
    QFile file(nomeFile);
    if (file.open(QIODevice::Append | QIODevice::WriteOnly | QIODevice::Text)
    {
      QTextStream stream(amp;file);
      stream << "File salvato correttamente";
      stream << ".....";
      stream << ".....";
    }
}
 

Комментарии:

1. Вы вызываете a::setName перед вызовом a::saveFile ?

2. Кроме того, в противном случае вы правильно используете переменную-член. Если бы вы этого не сделали, у вас была бы ошибка компилятора , а не ошибка времени выполнения (т. Е. Вы получили бы ошибку от компилятора при попытке собрать программу, а не ошибку в консоли при попытке запустить программу).

3. @ Joachim Да, вы правы. Я установил имя в dialog.cpp и вызвал сохранение в другом классе. Пытаюсь исправить код. Спасибо

4. я должен инициализировать setName(nomeFile); в dialog.cpp а затем сохраните файл в f.cpp

5. @MassimoD.N. Возможно, вы захотите нажать на мою ссылку выше.

Ответ №1:

попробуйте использовать его setName("filename.txt"); следующим образом: и затем в вашем методе SaveFile добавьте параметр, подобный этому: a::saveFile(QString _nomefile) и затем, когда вы вызываете метод, a::saveFile(getName())

Ответ №2:

Далее следуют некоторые догадки:

У вас есть что-то вроде dialog.hpp:

 class MyDialog : QDialog
{
public:
    MyDialog(QObject * parent = 0) : QDialog(parent) {}
    // other public stuff here
private:
    QString nomeFile;
    // other private stuff here
}
 

Вы используете два отдельных объекта в своих двух файлах, чтобы исправить это, вы должны использовать один объект и ссылаться на него.

например

 class MyDialog : QDialog
{
public:
    MyDialog(QObject * parent = 0, fileamp; ogg1) : QDialog(parent), m_ogg1(ogg1) {}
    // other public stuff here
private:
    QString nomeFile;
    fileamp; m_ogg1;
    // other private stuff here
}
 

dialog.cpp

 void MyDialog::someMethod()
{
    nomeFile="abcd"; 
    m_ogg1.setName(nomeFile);
}
 

f.cpp

 file ogg1;
MyDialog * dialog(this, ogg1);
dialog->exec();
ogg1->saveFile();