所以,我在命名空间中有这个类但是当我尝试创建一个实例时,我收到以下错误信息:
#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-&gt; value()); ^
我该如何解决?
答案 0 :(得分:2)
您正在关闭第一行后面的命名空间:
namespace Compressor {
class File;
}
然后在命名空间之外定义完整的类File
。这是编译器的另一个File
,而不是你在命名空间内启动的那个(只包含一个前向声明)