Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT窗口未访问另一个类对象_C++_Qt - Fatal编程技术网

C++ QT窗口未访问另一个类对象

C++ QT窗口未访问另一个类对象,c++,qt,C++,Qt,我正在尝试做一个文件管理系统。我是QT新手,无法理解导致此问题的原因。任何帮助都将不胜感激。 我想在window2中使用一个文件系统类(window2实际上是我的主窗口) 我有一个window2类,我使用window2中的文件系统实例。我还包括window2中的文件系统头类 private: FileSystem fs; public: void setFileSystem(FileSystem f){ fs=f; } FileSystem ge

我正在尝试做一个文件管理系统。我是QT新手,无法理解导致此问题的原因。任何帮助都将不胜感激。 我想在window2中使用一个文件系统类(window2实际上是我的主窗口)

我有一个window2类,我使用window2中的文件系统实例。我还包括window2中的文件系统头类

private:
    FileSystem fs;

public:
    void setFileSystem(FileSystem f){
        fs=f;
    }
    FileSystem getFileSystem(){
        return fs;
    }

我想使用window2在第三个窗口(名称:MainWindow)中使用此fs实例

private:
    window2* w2;
public:
    void setWindow2(window2* wt){
        w2=wt;
    }
    window2* getWindow2(){
        return w2;
    }
我尝试在MainWindow中访问window2中创建的fs对象,如下所示:

void MainWindow::on_createAFolderBt_clicked() //create a folder command
{
    bool ok;
    QString fname=QInputDialog::getText(this,"File Management System", "Type name of Folder",QLineEdit::Normal, QDir::home().dirName(),&ok);
    string newfolderName= fname.toLocal8Bit().constData(); //convert QString to std::string
if (ok){
    if (w2->getFileSystem().folderExists(w2->getFileSystem().navigator,newfolderName)){
        QMessageBox::warning(this,"","This Folder already exists");
    }
}

每当我按下输入对话框的OK,我的应用程序停止工作,当我调试它时,它显示了STL::C++的“读访问违例”向量的错误。我在文件系统代码中多次使用向量。这是因为文件系统对象在窗口关闭时被销毁吗?

因此,据我所知,您正在尝试创建一个文件系统对象,该对象在mainwindow中定义,当它超出范围时会被销毁,但如果您希望它
文件系统
在整个应用程序中运行,您可以将其设置为单例类

其次,您使用的是std字符串和vector,每次它分配使用qt容器所需的内存时,它都会分派容器。它们的速度更快,并且针对qt框架进行了优化


尝试一下,它会修正你的问题。

它显示C++向量类中的错误。哪个向量类??@ΦXocę웃Пepeúpaツ c++的stl::vector在哪里初始化
MainWindow::w2
?您确定它在使用时指向了一个有效的
window2
实例吗?@G.M.I did w2=new window2();在MainClass方法中,在您的注释之后使用它,问题不会消失。在这种情况下,我猜想您的代码中的其他地方有未定义的行为。
void MainWindow::on_createAFolderBt_clicked() //create a folder command
{
    bool ok;
    QString fname=QInputDialog::getText(this,"File Management System", "Type name of Folder",QLineEdit::Normal, QDir::home().dirName(),&ok);
    string newfolderName= fname.toLocal8Bit().constData(); //convert QString to std::string
if (ok){
    if (w2->getFileSystem().folderExists(w2->getFileSystem().navigator,newfolderName)){
        QMessageBox::warning(this,"","This Folder already exists");
    }
}