G ++架构x86_64的未定义符号

6 c++ g++

我正在学习C++并且已经获得了创建Vector3D类的任务.当我尝试在OSX上使用G ++编译main.cpp时,我收到以下错误消息.为什么会这样?

g++ main.cpp 
Undefined symbols for architecture x86_64:
  "Vector3DStack::Vector3DStack(double, double, double)", referenced from:
      _main in cc9dsPbh.o
ld: symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <iostream>;
#include "Vector3DStack.h";

using namespace std;

int main() {
    double x, y, z;
    x = 1.0, y = 2.0, z = 3.0;
    Vector3DStack v (x, y, z);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Vector3DStack.h

class Vector3DStack {
public:
    Vector3DStack (double, double, double);

    double getX ();
    double getY ();
    double getZ ();

    double getMagnitude();

protected:
    double x, y, z;
};
Run Code Online (Sandbox Code Playgroud)

Vector3DStack.cpp

#include <math.h>;
#include "Vector3DStack.h";

Vector3DStack::Vector3DStack (double a, double b, double c) {
    x = a;
    y = b;
    z = c;
}

double Vector3DStack::getX () {
    return x;
}

double Vector3DStack::getY () {
    return y;
}

double Vector3DStack::getZ () {
    return z;
}

double Vector3DStack::getMangitude () {
    return sqrt (pow (x, 2) * pow (y, 2) * pow (z, 2));
}
Run Code Online (Sandbox Code Playgroud)

Foz*_*ozi 23

你必须编译和链接你的Vector3DStack.cpp.尝试:

g++ main.cpp Vector3DStack.cpp -o vectortest
Run Code Online (Sandbox Code Playgroud)

这应该创建一个可执行文件vectortest.


pio*_*kuc 6

将执行传递Vector3D给编译器:

g++ main.cpp Vector3DStack.cpp
Run Code Online (Sandbox Code Playgroud)

这将产生a.out在Linux和Unix系统上调用的可执行文件.要更改可执行文件名,请使用-o选项:

g++ -o my_program main.cpp Vector3DStack.cpp
Run Code Online (Sandbox Code Playgroud)

这是构建程序最简单的方法.你应该学习更多 - 阅读有关make程序,甚至是cmake.