Я сталкиваюсь с проблемой, когда объявленное имя класса из включенного (внешнего) заголовочного файла сталкивается с объявленным именем класса моего собственного заголовочного файла. Но в основном я хочу составить свой класс с включенным классом. В Golang решением было бы использование функции под названием Декларации импорта .
Я искал уже несколько тем и форумов, но не могу придумать решение. То, что я пытался до сих пор (и что можно увидеть в коде ниже), это окружить включенный заголовок пользовательским пространством имен. Но это приводит к неприятным проблемам с линковкой (см. Ниже), когда я обращаюсь к методам включенного класса. Я немного новичок в C ++, поэтому я был бы очень рад получить подробные объяснения о том, как этого добиться.
Файл внешнего заголовка ("some / sensor.h"):
class Sensor {
public:
Sensor(unsigned char a, unsigned char b);
/*some definitions...*/
};
Моя декларация ("sensor.h"):
namespace Lib {
#include "some/sensor.h"
};
class Sensor {
private:
Lib::Sensor s; /* use foreign object as member */
public:
Sensor();
void init(unsigned char p);
};
Получение ошибок, таких как:
In function `Sensor::init(unsigned char)':
undefined reference to `Lib::Sensor::Sensor(unsigned char, unsigned char)'
/* ...and so on... */
collect2: error: ld returned 1 exit status