我对C ++比较陌生,但是来自Python和C。
我正在使用一个用于激光雷达传感器的SDK。我有5个主要文件。 SDK.h
,SDK.cpp
,setup.h
,setup.cpp
和main.cpp
。
在SDK中定义了一个类。
rplidar.h
class RPlidarDriver{
public:
static RPlidarDriver * CreateDriver(_u32 drivertype = DRIVER_TYPE_SERIALPORT);
// more code
}
main.cpp
#include <iostream>
#include "rplidar.h"
#include "setup.h"
using namespace std;
using namespace rp::standalone::rplidar;
int main()
{
//code
RPlidarDriver* lidar = RPlidarDriver::CreateDriver(DRIVER_TYPE_SERIALPORT);
start_reading(lidar, scanMode);
//code
}
setup.cpp
#include "setup.h"
#include "rplidar.h"
using namespace std;
using namespace rp::standalone::rplidar;
void start_reading(RPlidarDriver* driver, const char* scanMode)
{
//start motor
driver->startMotor();
//more code...
}
setup.h
#include "rplidar.h"
using namespace rp::standalone::rplidar;
namespace setup
{
void start_reading(RPlidarDriver* driver, const char* scanMode);
}
但是我收到此错误
main.obj:错误LNK2019:未解决的外部符号“ void __cdecl setup :: start_reading(class rp :: standalone :: rplidar :: RPlidarDriver *,char const *)”(?start_reading @ setup @@ YAXPAVRPlidarDriver @ rplidar @函数_main中引用的standalone @ rp @@ PBD @ Z
在尝试使用该对象作为参数的其他函数中,我也遇到相同的错误。
如果我将setup.cpp
中的函数放到main.cpp
中,它将很容易编译。我尝试实现&
,并改为使用参数作为参考,但不走运。
答案 0 :(得分:-2)
main.cpp
和setup.cpp
都需要编译,并且生成的目标文件需要与SDK库一起链接在一起。您得到的错误是告诉您您尝试仅使用main.o和不带setup的SDK来链接最终二进制文件。这就是为什么链接器无法通过实现start_reading
来找到符号的原因功能。