c ++错误:: -1:错误:在Qt-Creator中找不到架构x86_64的符号

时间:2016-11-29 15:54:53

标签: c++ qt qt-creator

我正在uni上进行练习,每次我尝试编译main.cpp时都会遇到同样的错误。

actor.h:

class Actor {
public:
Actor();
Actor(double x0, double y0);
void move();
double pos_x();
double pos_y();

static const int ARENA_W = 500;
static const int ARENA_H = 500;
};

plane.h(演员的子类):

class Plane:Actor
{
public:
Plane();
Plane(double x0, double y0);
void move();
double pos_x();
double pos_y();

//int dx = 5;
static const int W = 50;
static const int H = 20;

private:
double x, y;
};

plane.cpp

#include "plane.h"
#include "actor.h"

Plane::Plane(double x0, double y0)
{
this ->x = x0;
this ->y = y0;
//this -> dx;
}

void Plane::move()
{
x = x + 2.5 ;
}

 double Plane::pos_x()
{
return x;
}
double Plane::pos_y()
{
return y;
}

的main.cpp

include "plane.h"
include"actor.h"

using namespace std;

int main(int argc, char *argv[])
{
Plane plane1(25.0, 5.0);
plane1.move();
double x = plane1.pos_x();
double y = plane1.pos_y();
cout << x << " , " << y<<endl;
}

我看到有很多关于这个问题的问题,但我没有解决它。 你能帮我吗()? 谢谢

1 个答案:

答案 0 :(得分:0)

您已在Actor中宣布了一个班级actor.h

class Actor {
    public: Actor();
};

这意味着您将编写一些将定义此构造的代码。这通常会以Actor.cpp文件结尾。

如果您尝试在没有此实现的情况下构造Actor,则会从链接器中收到错误,因为您错过了默认构造函数。

现在您宣布PlaneActor的子类:

class Plane : Actor {
};

并且您已经定义了一个非默认构造函数:

Plane::Plane(double, double) {
   // does something
}

由于PlaneActor的子类,因此构建Actor时会隐式构建默认Plane,并且正如您所做的那样声明会有一个实现,链接器期待它。由于您从未在代码中定义它,因此链接器在此时失败。

稍微简单的解决方案是在actor.h中添加一个简单的构造函数;即:

class Actor {
public:
Actor() {} // replace the ; with {}
Actor(double x0, double y0);
void move();
double pos_x();
double pos_y();

static const int ARENA_W = 500;
static const int ARENA_H = 500;
};
  

现在,对于此处的行为 - movepos_xpos_y方法均未声明为virtual,因此它们未在Plane中重载{1}};他们只是被替换了。这可能会在你的课程后期出现。