由于命名空间而导致的对象实例化错误

Object instantiation error because of namespace

本文关键字:对象 实例化 错误 命名空间      更新时间:2023-10-16

所以,我在命名空间中有这个类,但是当我尝试创建实例时,我收到以下错误消息:

#ifndef FILE_H
#define FILE_H
#include "constants.h"
#include <cstdlib>
#include <QVector>
namespace Compressor {
class File;
}
class File {
public:
    QVector<QVector<int>> bytes;
    int length;
public:
    File(int l);
};
#endif // FILE_H

#include "file.h"
File::File(int l) {
    length = l;
    for(int i = 0; i < length; i++) {
        QVector<int> b;
        for(int j = 0; j < BYTESIZE; j++)
            b.push_back(rand( ) % 2);
        bytes.push_back( b );
    }
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "file.h"
#include "tableconfig.h"
#include "tableshow.h"
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    Compressor::File *fl;
//...
//...

void MainWindow::on_buttonOrigin_clicked( ) {
    fl = new Compressor::File( ui->spinBox->value( ) ); // The problem happens here.
    showBytesTable(ui->tableOrigin, fl);
}

这里是错误消息:

/

home/roger/Programming/C-C++/Linux/Qt/Compressor-4bits/mainwindow.cpp:13:错误:无效使用不完整的类型"class Compressor::File" fl = new Compressor::File( ui->spinBox->value( ( (; ^

我该如何解决这个问题?

您将关闭第一行后面的命名空间:

namespace Compressor {
class File;
}

然后在命名空间外部定义完整的类File。这是编译器的另一个File,而不是您在命名空间中启动的编译器(它不包含任何内容,只是一个前向声明(