如何在头文件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).
我使用 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).