C++ :error LINK2005:函数XXX已经在main.obj中定义--解决方法

我的情况是这样的:

     我在头文件中定义了一个函数,然后这个函数被其他函数引用。但是编译的时候死活通不过,一直报错: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);
}

搞定!

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值