我的情况是这样的:
我在头文件中定义了一个函数,然后这个函数被其他函数引用。但是编译的时候死活通不过,一直报错:error LINK2005,费了好大力气-_-才解决。
#include "aabb.h"
#pragma once
#define M_PI 3.14159
aabb surrounding_box(aabb box0, aabb box1) {
vec3 small(fmin(box0.min().getX(), box1.min().getX()),
fmin(box0.min().getY(), box1.min().getY()),
fmin(box0.min().getZ(), box1.min().getZ()));
vec3 big(fmax(box0.max().getX(), box1.max().getX()),
fmax(box0.max().getY(), box1.max().getY()),
fmax(box0.max().getZ(), box1.max().getZ()));
return aabb(small, big);
}
解决方法:
将这个函数移动到head.cpp中(莫偷懒!),只在head.h中声明该函数,注意加上extern关键字。
解决后如下:
head.h:
#ifndef HEAD_H
#define HEAD_H
#include "vec3.h"
#include "aabb.h"
#pragma once
#define M_PI 3.14159
extern void get_sphere_uv(const vec3& p, float& u, float& v);
extern aabb surrounding_box(aabb box0, aabb box1);
#endif
head.cpp:
#include "head.h"
void get_sphere_uv(const vec3& p, float& u, float& v)
{
float phi = atan2(p.getZ(), p.getX());
float theta = asin(p.getY());
u = 1 - (phi + M_PI) / (2 * M_PI);
v = (theta + M_PI / 2) / M_PI;
}
aabb surrounding_box(aabb box0, aabb box1) {
vec3 small(fmin(box0.min().getX(), box1.min().getX()),
fmin(box0.min().getY(), box1.min().getY()),
fmin(box0.min().getZ(), box1.min().getZ()));
vec3 big(fmax(box0.max().getX(), box1.max().getX()),
fmax(box0.max().getY(), box1.max().getY()),
fmax(box0.max().getZ(), box1.max().getZ()));
return aabb(small, big);
}
搞定!