我遇到的问题是我的Rectangle类没有被视为一种类型。我已经包含了正确的标题,所以我很困惑。
shapes.h
#ifndef SHAPES_H
#define SHAPES_H
#include "Colors.h"
#include <QPoint>
#include "glwidget.h"
//class GLWidget;
class Shape
{
public:
virtual void draw();
};
class Rectangle : Shape
{
public:
Rectangle(GLWidget *w, QPoint tl, QPoint br){
glWidget = w;
topLeft = tl;
btmRight = br;
}
virtual void draw(){
// top horizontal
for(int i = topLeft.x(); i < btmRight.x(); i++){
glWidget->setPixel(i,topLeft.y(), color);
}
}
private:
QPoint topLeft,btmRight;
GLWidget *glWidget;
RGBColor color;
};
#endif // SHAPES_H
glwidget.cpp
#include <QtGui>
#include <QtOpenGL>
#include <math.h>
#include <stdio.h>
#include "glwidget.h"
#include "Shapes.h"
#ifndef GL_MULTISAMPLE
#define GL_MULTISAMPLE 0x809D
#endif
// ... a bunch of code that doesn't need to be included
void GLWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton){
// do some drawing stuff
QPoint mPos = event->pos();
switch(drawmode)
{
case 1:
currentShape = new Rectangle(this,mPos, mPos); /*** This is the error ***/
}
}
}
glwidget.h
#ifndef AGLWIDGET_H
#define AGLWIDGET_H
#include <QGLWidget>
#include "Colors.h"
class Shape;
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
GLWidget(QWidget *parent = 0);
~GLWidget();
QSize minimumSizeHint() const;
QSize sizeHint() const;
void setPixel(int x, int y, RGBColor c);
public slots:
void setColor(RGBColor c);
void setDrawRectangle();
protected:
void initializeGL();
void paintGL();
void resizeGL(int width, int height);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
private:
QPoint lastPos;
QVector<QPoint> drawPoints;
RGBColor paintColor;
int drawmode;
Shape *currentShape;
};
抱歉代码加载......确切的错误是 'Rectangle'不是类型glwidget.cpp第85行
任何人都知道为什么它不会将Rectangle视为glwidget.cpp中的类型,尽管我包含了“Shapes.h”? 提前谢谢!
答案 0 :(得分:1)
这有点过分,但你确定你在GLWidget代码方面正确使用了moc吗? IE,您是否已将#include "glwidget.moc
添加到.cpp文件中或将其包含在您的构建系统中(qmake知道为您执行此操作),以及首先运行moc。我之所以提到这一点,是因为在许多月前忘记做这件事让我看到了一堆难以理解的与类型有关的警告和错误。
答案 1 :(得分:1)
也许在GLWidget的祖先某处有一个名为Rectangle的方法或成员,并且存在混淆。请参阅GLWidget及其祖先的文档
答案 2 :(得分:0)
看起来编译器认为Rectangle
is a template
答案 3 :(得分:0)
好吧,我要去做它与Shape中的虚拟函数有关,而不是在g++ undefined reference to typeinfo中定义的。我遇到奇怪错误的机器是使用Qt的旧版本而不是我个人机器上的版本,我的个人对此代码没有任何问题。
感谢所有人的建议,但我只是想放下这个。