几乎是最后一步,但仍然有一些奇怪的错误......
bash-3.2$ make
g++ -Wall -c -g Myworld.cc
g++ -Wall -g solvePlanningProblem.o Position.o AStarNode.o PRM.o PRMNode.o World.o SingleCircleWorld.o Myworld.o RECTANGLE.o CIRCLE.o -o solvePlanningProblem
Undefined symbols:
"vtable for Obstacle", referenced from:
Obstacle::Obstacle()in Myworld.o
"typeinfo for Obstacle", referenced from:
typeinfo for RECTANGLEin RECTANGLE.o
typeinfo for CIRCLEin CIRCLE.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [solvePlanningProblem] Error 1
Run Code Online (Sandbox Code Playgroud)
vtable和typeinfo的含义是什么?
我在下面写了一个函数:
void trans(double x,double y,double theta,double m,double n)
{
m=cos(theta)*x+sin(theta)*y;
n=-sin(theta)*x+cos(theta)*y;
}
Run Code Online (Sandbox Code Playgroud)
如果我在同一个文件中调用它们
trans(center_x,center_y,angle,xc,yc);
Run Code Online (Sandbox Code Playgroud)
会的价值xc和yc改变?如果没有,我该怎么办?
一切正常,除了这个未定义的符号错误:
bash-3.2$ make
g++ -Wall -g solvePlanningProblem.o Position.o AStarNode.o PRM.o PRMNode.o Worl.o SingleCircleWorld.o Myworld.o RECTANGLE.o CIRCLE.o -o solvePlanningProblem
`Undefined symbols:
"Obstacle::~Obstacle()", referenced from:
Myworld::~Myworld()in Myworld.o
Myworld::~Myworld()in Myworld.o
Myworld::~Myworld()in Myworld.o
"RECTANGLE::RECTANGLE()", referenced from:
Myworld::readObstacles(std::basic_istream<char, std::char_traits<char> >&
in Myworld.o
"CIRCLE::CIRCLE()", referenced from:
Myworld::readObstacles(std::basic_istream<char, std::char_traits<char> >&
in Myworld.o
"typeinfo for Obstacle", referenced from:
typeinfo for RECTANGLEin RECTANGLE.o
typeinfo for CIRCLEin CIRCLE.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [solvePlanningProblem] Error 1`
Run Code Online (Sandbox Code Playgroud)
这是一个奇怪的错误.构造函数或析构函数有问题吗?任何建议都会有帮助.
在所有构造函数和析构函数之后添加{}之后,错误已减少为:
Undefined symbols:
"vtable for Obstacle", …Run Code Online (Sandbox Code Playgroud) 一切都很好,最后一个问题很烦人。编译很棒,但是链接失败:
bash-3.2$ make
g++ -Wall -c -g Myworld.cc
g++ -Wall -g solvePlanningProblem.o Position.o AStarNode.o PRM.o PRMNode.o World.o SingleCircleWorld.o Myworld.o RECTANGLE.o CIRCLE.o -o solvePlanningProblem
**Undefined symbols:
"vtable for Obstacle", referenced from:
Obstacle::Obstacle()in Myworld.o
"typeinfo for Obstacle", referenced from:
typeinfo for RECTANGLEin RECTANGLE.o
typeinfo for CIRCLEin CIRCLE.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [solvePlanningProblem] Error 1**
Run Code Online (Sandbox Code Playgroud)
障碍物
#ifndef Obstacle_hh
#define Obstacle_hh
#include <vector>
#include <iostream>
class Obstacle{
public:
Obstacle(){}
virtual bool collidesWith(double x,double y);
virtual void …Run Code Online (Sandbox Code Playgroud)