小编Lis*_*isa的帖子

未定义的符号"vtable for ..."和"typeinfo for ..."?

几乎是最后一步,但仍然有一些奇怪的错误......

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的含义是什么?

c++ linker-errors pure-virtual vtable undefined-reference

46
推荐指数
5
解决办法
4万
查看次数

当我更改函数内部的参数时,它也会为调用者更改吗?

我在下面写了一个函数:

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)

会的价值xcyc改变?如果没有,我该怎么办?

c++

16
推荐指数
2
解决办法
3万
查看次数

未定义的符号.ld:找不到符号

一切正常,除了这个未定义的符号错误:

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)

c++ linux linker

4
推荐指数
1
解决办法
2万
查看次数

我应该如何处理这个奇怪的错误?

一切都很好,最后一个问题很烦人。编译很棒,但是链接失败:

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)

c++

1
推荐指数
1
解决办法
5699
查看次数