由于命名空间[关闭]导致对象实例化错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由于命名空间[关闭]导致对象实例化错误相关的知识,希望对你有一定的参考价值。

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

#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:错误:无效使用不完整类型'类Compressor :: File'fl = new Compressor :: File(ui-> spinBox-> value()); ^

我该如何解决这个问题?

答案

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

namespace Compressor {
class File;
}

然后在命名空间之外定义完整的类File。这是编译器的另一个File,而不是你在命名空间内启动的那个(它什么都不包含,只是一个前向声明)

以上是关于由于命名空间[关闭]导致对象实例化错误的主要内容,如果未能解决你的问题,请参考以下文章

片段事务中的实例化错误

WCF 客户端,XML 命名空间前缀导致空对象

为什么我不能在没有完整命名空间的情况下从字符串中实例化新对象

c ++由于命名空间导致无法解释的类“尚未声明”错误

调用片段活动错误无法实例化活动。无法转换为 android.app.Activity

有没有办法关闭代码片段中的命名建议?