如何从.h和.cpp

时间:2019-06-27 23:11:03

标签: c++ visual-studio visual-studio-2010 object sdk

我对C ++比较陌生,但是来自Python和C。

我正在使用一个用于激光雷达传感器的SDK。我有5个主要文件。 SDK.hSDK.cppsetup.hsetup.cppmain.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中,它将很容易编译。我尝试实现&,并改为使用参数作为参考,但不走运。

1 个答案:

答案 0 :(得分:-2)

main.cppsetup.cpp都需要编译,并且生成的目标文件需要与SDK库一起链接在一起。您得到的错误是告诉您您尝试仅使用main.o和不带setup的SDK来链接最终二进制文件。这就是为什么链接器无法通过实现start_reading来找到符号的原因功能。