shared_ptr<Shape> circle(new Circle(Vec2f(0, 0), 0.1, Vec3f(1, 0, 0)));
shared_ptr<Shape> rect(new Rect2f(Vec2f(0, 0), 5.0f, 5.0f, 0,
Vec3f(1.0f, 1.0f, 0)) );
Sto cercando di capire perché quanto sopra non verrà compilato. Per una qualche ragione, quando cerco di creare un'istanza di Rect2f (che ereditano dalla classe Shape
specificato l'argomento shared_ptr
modello, proprio come Circle
), ottengo il seguente errori:Errore: identificatore del tipo previsto prima di 'ClassName'
error: expected type-specifier before 'Rect2f'
error: expected ')' before 'Rect2f'
Tutto sulla Circle
shared_ptr
è perfettamente a posto. Non ci sono problemi con esso; è solo il Rect2f
che causa problemi.
Inoltre, i valori passati nel costruttore sono validi.
Quindi, quale potrebbe essere il problema con questo? Ho incluso Rect.h
per questo. Per l'amor di brevità (e incassa ho perso qualcosa in quel file, che possono influenzare questo), vi posterò la seguente:
Rect.h
#pragma once
#include <QGLWidget>
#include <GL/glext.h>
#include <cmath>
#include <QDebug>
#include "Shape.h"
#include "Vec3f.h"
#include "rand.h"
const int DEFAULT_SQUARE_WIDTH = 5;
const int DEFAULT_SQUARE_HEIGHT = 5;
typedef enum {
RC_TOPLEFT,
RC_TOPRIGHT,
RC_BOTTOMRIGHT,
RC_BOTTOMLEFT
} RectangleCorner;
class Rect2f : public Shape
{
public:
Rect2f(
Vec2f center = Vec2f(),
float width = 4,
float height = 4,
float radius = 0,
Vec3f color = Vec3f()
);
~Rect2f();
inline const float GetWidth(void) const {
return mWidth;
}
inline const float GetHeight(void) const {
return mHeight;
}
inline const Vec2f* GetCorner(RectangleCorner rc) const {
switch(rc) {
case RC_TOPLEFT:
return mTopLeftCrnr;
break;
case RC_TOPRIGHT:
return mTopRightCrnr;
break;
case RC_BOTTOMLEFT:
return mBottomLeftCrnr;
break;
case RC_BOTTOMRIGHT:
return mBottomRightCrnr;
break;
}
}
void UpdateCorners();
virtual void Collide(Shape &s);
virtual void Collide(Rect2f &r);
virtual void Collide (Circle &c);
virtual bool Intersects(const Shape& s) const;
virtual bool Intersects(const Rect2f& s) const;
virtual bool IsAlive(void) const;
virtual float Mass(void) const;
protected:
virtual void Draw(void) const;
float mWidth, mHeight;
Vec3f mColor;
private:
Vec2f* mTopLeftCrnr;
Vec2f* mTopRightCrnr;
Vec2f* mBottomLeftCrnr;
Vec2f* mBottomRightCrnr;
};
Fonte di funzione di errore e file di intestazione (mainwindow.cpp)
#include "ui_mainwindow.h"
#include "Vec2f.h"
#include "Rect2f.h"
#include "SharedPtr.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
BoxOfShapes* display = new InteractiveBoxOfShapes(this, 600, 600);
ui->mGridLayout->addWidget(display);
ui->mStatusBar->showMessage("status ok");
QObject::connect(display, SIGNAL(numShapesChanged(int)), this, SLOT(setNumShapes(int)));
QObject::connect(ui->mResetButton, SIGNAL(pressed()), display, SLOT(resetWorld()));
shared_ptr<Shape> circle(
new Circle(
Vec2f(0, 0),
0.1,
Vec3f(1, 0, 0)));
/*std::shared_ptr<Shape> rect(<---error
new Rect2f(
Vec2f(0, 0),
5.0f,
5.0f,
0,
Vec3f(1.0f, 1.0f, 0)
)
);*/
shared_ptr<Shape> rect(new Rect2f()); //error - second attempt
display->addShape(circle);
display->addShape(rect);
}
principale Function test (main.cpp)
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "Rect2f.h"
int main(int argc, char *argv[])
{
Rect2f rec;
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Domanda
A giudicare dalle errori previsti, quello che mi manca qui? Inoltre, cosa si può fare per correggere questo problema?
Hai incluso l'intestazione per Rect2f? O hai fatto una dichiarazione in avanti? –
Sì, ho incluso l'intestazione per Rect2f. – zeboidlund