我有一个类,Pose.hpp和Pose.cpp,以及一个main.cpp来使用它,但是在编译时我遇到了错误。 我正在使用它来编译:
$g++ -c main.cpp
$g++ -c Pose.cpp
$g++ -o Pose.o main.o
// Pose.hpp
#include "Vec3f.hh"
#include <vector>
using namespace std;
using std::vector;
class Pose
{
Vec3f root_position;
vector < Vec3f > bonesAngles;
vector < Vec3f > bonesPosition;
public:
void setRootPosition (Vec3f position);
void addBone (Vec3f newBone);
};
//Pose.cpp
#include "Pose.hpp"
using namespace std;
void Pose :: setRootPosition (Vec3f position)
{
root_position = position;
}
void Pose :: addBone (Vec3f newBone)
{
bonesAngles.push_back(newBone);
}
//main.cpp
#include <iostream>
#include "Pose.hpp"
using namespace std;
int main()
{
Pose pose;
Vec3f aux(.2,.3,.4);
pose.addBone(aux);
return 0;
}
我收到了错误: /tmp/ccSzsctS.o:main.cpp:function main:错误:未定义引用'Pose :: addBone(Vec3f)'
collect2:erro:ld返回1退出状态
答案 0 :(得分:0)
您必须为每个.cpp编译.o文件。试试这个:
$ g ++ -c Pose.cpp -o Pose.o
$ g ++ -c main.cpp -o main.o
$ g ++ -o Pose.o main.o MyProgram
.o文件被称为“对象”文件,基本上将包含最终编译的所有信息。在您的情况下,您需要函数定义(这是您的编译错误所说的)。正如您所做的那样进行编译只会检查语法是否正确。
编译期间有两个步骤:编译和链接。编译(使用您的命令行)只是检查语法是否正确。在此步骤结束时,将生成目标文件。链接使用目标文件(以及可能的其他类型的文件,如.dll,.lib)来创建最终产品(在您的情况下是一个可执行文件,但您可以生成许多不同的东西,如.dll,.lib, .a等...)。
理解编译是编程中的关键步骤,我邀请您进入编程。
有关更详细的说明,请查看:http://www.cs.fsu.edu/~jestes/howto/g++compiling.txt
祝你好运!