gcc 4.7.4链接问题:体系结构x86_64的未定义符号

时间:2017-06-10 17:33:33

标签: c++ macos gcc compiler-errors

我是新来的,所以我希望你能帮助我们。我在C ++项目中工作,试图用终端(Mac Os)编译它,但是当我包含我的类的.hpp时总是会出错,但是当我包含.cpp

  

我试图在主要内容中做出最简单的例子,以便更清楚地看到问题。

这些是我的文件:

的main.cpp

#ifndef Point_hpp
#define Point_hpp

#include <math.h>
#include <iostream>
#include <stdio.h>

class Point{
private:
  double dX;
  double dY;

public:
  Point();
  Point(double dX, double dY);

  void setX(double dX);
  double getX();
  void setY(double dY);
  double getY();

  double getDistance(Point p);

  void move(double dDespX, double dDespY);

  void display();
};

#endif

Point.hpp

#include "Point.hpp"

Point::Point(){
  dX = 0;
  dY = 0;
}

Point::Point(double dX, double dY){
  this -> dX = dX;
  this -> dY = dY;
}

void Point::setX(double dX){
  this -> dX = dX;
}

double Point::getX(){
  return dX;
}

void Point::setY(double dY){
  this -> dY = dY;
}

double Point::getY(){
  return dY;
}

double Point::getDistance(Point p){
  double dDist;
  dDist = sqrt(pow(p.dX - dX, 2) + pow(p.dY - dY, 2));
  return dDist;
}

void Point::move(double dDespX, double dDespY){
  dX += dDespX;
  dY += dDespY;
}

void Point::display(){
  std::cout << "Point = (" << dX << "," << dY <<")" << std::endl;
}

Point.cpp

$ make main
c++     main.cpp   -o main
Undefined symbols for architecture x86_64:
  "Point::Point()", referenced from:
      _main in ccVzh5gg.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make: *** [main] Error 1

当我尝试编译时(使用&#39; make main&#39;)我从终端获取此信息:

echo str_repeat('Z', 4); // ZZZZ

1 个答案:

答案 0 :(得分:0)

您需要将Point.cpp添加到您编译的文件列表中并链接到makefile中。所以将编译行更改为

c++     main.cpp  Point.cpp  -o main

因为您没有将Point.cpp文件中的定义链接到可执行文件,所以您无权访问Point.cpp中提供的函数,您只知道它们的声明(参数和返回值)at编译时间。