-2

基本的に、私は摩擦からベース(またはその逆)まですべてを継承しようとしていますが、それは私が入れたクラスを識別していません。

base.h

#ifndef BASE_H
#define BASE_H
#include <QMainWindow>

namespace Ui {
   class Base;
}

class Base : public QMainWindow{
  Q_OBJECT

public:
   explicit Base(QWidget *parent = 0);
   ~Base();

private:
   Ui::Base *ui;
};
#endif // BASE_H

摩擦.h:

#ifndef FRICTION_H
#define FRICTION_H

class Friction : public Base{ // THIS IS WHERE THE ERROR IS
  public:
Friction();
};

#endif // FRICTION_H

base.cpp

#include "friction.h"
#include "base.h"
#include "ui_base.h"

Base::Base(QWidget *parent) :QMainWindow(parent),ui(new Ui::Base){
   ui->setupUi(this);
}

Base::~Base(){
   delete ui;
}

摩擦.cpp

#include "friction.h"
#include "base.h"
#include "ui_base.h"

Friction::Friction(){
}

そして最後にmain.cpp

int main(int argc, char *argv[]){
  QApplication a(argc, argv);
  Base w;
  w.show();

  Friction f;

  return a.exec();
}

「'{'トークンの前にクラス名が必要です」というエラーが表示されます。プロジェクトを可能な限り削減しましたが、エラーが発生しますが、理由はわかりません。

私はc++にかなり慣れていませんが、継承は基本的なプログラムではそれほど問題ではないことがわかりましたが、Qtに移行すると、それを機能させることができなかったようです。なぜクラスが特定されないのか全くわからないので、インクルードの変更などいろいろ試してみました。

4

1 に答える 1

2

摩擦がベースを継承する場合、あなたが置くべきよりも:

#include "base.h"

摩擦.hファイルでは、次のようになります。

#ifndef FRICTION_H
#define FRICTION_H

#include "base.h"

class Friction : public Base{ // THIS IS WHERE THE ERROR IS
  public:
Friction();
};
于 2013-03-10T17:05:23.127 に答える