我有: frw_trafic.h:
#define PI 3.14159265
namespace FRW
{
float angleToProperRadians(float angle);
class Car
{
public:
...
void transform(int time = 1);
...
private:
...
float velocDir; // angle in degrees, same as Sector angle
float wheelDir; // hence delta angle between car velocity direction and where wheels drive direction
float centerPosX;
float centerPosY; //these two are for car position
... }; }
这是一个带有类和声明方法的命名空间。 frw_traffic.cpp
#ifndef FRWTRAFFIC
#define FRWTRAFFIC
#include "frw_traffic.h"
#endif
#include <cmath>
using namespace FRW;
float angleToProperRadians(float angle)
{
for (; angle < -360 || angle > 360;)
{
if (angle < -360)
{
angle = angle + 360;
continue;
}
if (angle > 360)
{
angle = angle - 360;
}
}
if (angle < 0)
{
angle = 360 - angle;
}
return angle * PI / 180;
}
void Car::transform(int time) {
if (wheelDir == 0)
{
centerPosX = centerPosX + static_cast<float>(time) * speed * cos(FRW::angleToProperRadians(velocDir)) ;
centerPosY = centerPosY + static_cast<float>(time) * speed * sin(FRW::angleToProperRadians(velocDir)) ;
} }
方法angleToProperRadians()在.h中声明,在.cpp中定义,用于计算宏PI,在.h中定义。 然后,我用方法Car :: tranform()计算线轨迹中的对象位置。它也在.h文件中声明为Car类的一部分,并在.cpp文件中定义。
此代码无法编译,提供“未解析的外部符号”。错误。 AFA这是一个链接错误,我相信有些东西搞砸了宏或包含。 我一直在拼命试图在Stack Overflow上使用关于此错误的其他问题,但是大多数人在使用外部库时遇到了这个错误。
请某人提供一些建议,告诉他们要检查两次该代码的真正错误。
错误LNK2019:未解析的外部符号“float __cdecl FRW :: angleToProperRadians(float)”(?angleToProperRadians @ FRW @@ YAMM @ Z)在函数“public:void __thiscall FRW :: Car :: transform(int)”中引用(?转换@ Car @ FRW @@ QAEXH @ Z)
谢谢。
答案 0 :(得分:0)
实际上,在这种特殊情况下,宏无处可归。 链接是错误的,因为在.h中声明并在.cpp文件中定义的angleToProperRadians()方法是完全独立的函数。
实际上,.h中的一个现在位于FRW命名空间中。 事实上,.cpp中的一个现在是另一个新的全局函数。 并且&#34;使用名称空间FRW;&#34;实际上并没有帮助这种情况,因为它可用于引用已经定义的方法。
这是.cpp中的正确方法:
...
float FRW::angleToProperRadians(float angle)
{
for (...) {
...
注意,当我们第一次引用一个类然后定义它的方法时它是如何180转。
那就是它。感谢Yves Daoust在评论中指出这一点。