2013-03-10 4 views
-2

В основном я пытаюсь наследовать все от трения в базу (или даже наоборот), однако, не идентифицирующие классов я вставил в.Проблемы с наследованием в Qt

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 

friction.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; 
} 

friction.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 я не мог заставить его работать. Я пробовал много вещей об изменении включений и т. Д., Так как я совершенно не замечаю, почему он не идентифицирует класс.

ответ

2

Если трение наследует базу, чем вы должны поставить:

#include "base.h" 

в friction.h файл, например так:

#ifndef FRICTION_H 
#define FRICTION_H 

#include "base.h" 

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

И, возможно, вы забыли '' Q_OBJECT' в Friction' – troyane

+1

О, большое спасибо. Извините за мое невежество, я только начал C++ 2 дня назад. – iyop45

+0

@ user1 Вы должны изучить C++ задолго до изучения Qt. Qt имеет сильные архитектурные парадигмы, основанные главным образом на том, что «moc» может и не может сделать, а это означает, что вы можете изучить довольно искаженный и узкий взгляд на язык. – cmannett85

Смежные вопросы