我是新来的,所以我希望你能帮助我们。我在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
答案 0 :(得分:0)
您需要将Point.cpp
添加到您编译的文件列表中并链接到makefile中。所以将编译行更改为
c++ main.cpp Point.cpp -o main
因为您没有将Point.cpp
文件中的定义链接到可执行文件,所以您无权访问Point.cpp
中提供的函数,您只知道它们的声明(参数和返回值)at编译时间。