Как передать объект в качестве параметра в функцию из .h и .cpp - PullRequest
0 голосов
/ 28 июня 2019

Я относительно новичок в 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 (класс rp :: standalone :: rplidar :: RPlidarDriver *, char const *)» (? Start_reading @ setup @@ YAXPAVRPlidarDriver @ rplidar @ standalone @ rp @@ PBD @ Z) в функции _main

Я также получаю ту же ошибку для других функций, которые я пытаюсь использовать объект в качестве параметра.

Если я поместил функцию в setup.cpp в main.cpp, она легко компилируется. Я попытался реализовать & и использовать вместо этого параметр в качестве ссылки, но не удача.

1 Ответ

0 голосов
/ 28 июня 2019

main.cpp и setup.cpp оба должны быть скомпилированы, а полученные объектные файлы должны быть связаны вместе с библиотеками SDK. Ошибка, которую вы получаете, говорит вам, что вы пытаетесь связать окончательный двоичный файл, используя только main.o и SDK без setup.o. Поэтому компоновщик не может найти символ с реализацией вашей функции start_reading.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...