如何在头文件cpp中使用typedef

How to use typedef in header file cpp

我使用 typedef 和结构创建了一个新类型。我想将该类型作为模块导出。

我有以下cpp头文件:

//header.h
#ifndef VECTOR_H
#define VECTOR_H
typedef struct {
    float x;
    float y;
    float z;
} Vector;
#endif

#ifndef PLANE_H
#define PLANE_H
class Plane {
    public: 
        //this works
        Vector n;
        //this does not work
        Plane(Vector P1, Vector P2, Vector);
};
#endif

这是模块文件:

//module.cpp
#include header.h
typedef struct {
    float x;
    float y;
    float z;
} Vector;

class Plane {
    public: 
        Vector n;
        Plane(Vector P1, Vector P2, Vector P3) {...}
};

并且在这个文件中,我创建了一个调用构造函数的 class 平面的对象:

//main.cpp
#include header.h
float distance = 10;

int main() {
    Vector P1 = { 0, 0, 11.5 };
    Vector P2 = { 0, distance, 10 };
    Vector P3 = { distance, distance, 5 };

    Plane E(P1, P2, P3);
    return 0;
}

这会引发以下错误:

undefined reference to `Plane::Plane(Vector, Vector, Vector)'

导致此错误的原因是什么,我该如何解决?

我使用以下命令编译:

g++ main.cpp header.h

您似乎在复制 Plane class 的声明,而包含就足够了,因此请将您的 module.cpp 文件更改为:

#include "header.h"

Plane::Plane(Vector P1, Vector P2, Vector P3)
{
}

Note that above does define what the header does declare, in C and C++, we can separate the declaration from definition
(I mean, method or function's {} body).