我正在为移动机器人编写.lib文件。 关于机器人移动的其他命令,我还有扫描蓝牙设备的命令,如下所示:
void ScanForDevices(vector<Device> &Robot)
{
/* code for searching Bluetooth devices and saving their names and addresses into vector of Device struct*/
}
我的问题与编写.lib文件的标题有关。
我的一个命令是:
string RobotMove(int Translation, int Rotation)
{
/* create Command
return string(Command);
}
在标题中,对于该命令,我有:
// Returns MOVE command
std::string RobotMove(int Translation, int Rotation);
我遇到的问题是在标题中写什么:
void ScanForDevices(vector<Device> &Robot)
我一直得到“不允许不完整的类型”是我尝试以与RobotMove命令相同的方式。我是否必须以某种方式在头文件结构Device中声明?
答案 0 :(得分:4)
我是否必须以某种方式在头部结构设备中声明?
如果要为Device
创建向量,则需要让编译器通过定义它来了解类的大小。正如BoBTFish所指出的,通常的方法是只包含Device.h
标题(或类似标题)。
如果您使用指针(vector<Device*>
甚至更好,适当类型的智能指针:vector<shared_ptr<Device>>
)前向声明(只是说明class Device;
)就足够了,因为编译器知道的大小指针在你的架构上。 (请注意,这是一种完全不同的语法,而不是你的问题,这只是一个侧面注释)。
答案 1 :(得分:0)
如果您的头文件不包含(直接或间接)矢量类的定义,则需要将#include <vector>
添加到头文件中。如果没有提供正确的信息,编译器就不会知道这种数据类型。