我的静态库头文件中的void函数问题

时间:2013-11-25 09:25:26

标签: c++ header static-libraries void

我正在为移动机器人编写.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中声明?

2 个答案:

答案 0 :(得分:4)

  

我是否必须以某种方式在头部结构设备中声明?

如果要为Device创建向量,则需要让编译器通过定义它来了解类的大小。正如BoBTFish所指出的,通常的方法是只包含Device.h标题(或类似标题)。

如果您使用指针(vector<Device*>甚至更好,适当类型的智能指针:vector<shared_ptr<Device>>)前向声明(只是说明class Device;)就足够了,因为编译器知道的大小指针在你的架构上。 (请注意,这是一种完全不同的语法,而不是你的问题,这只是一个侧面注释)。

答案 1 :(得分:0)

如果您的头文件不包含(直接或间接)矢量类的定义,则需要将#include <vector>添加到头文件中。如果没有提供正确的信息,编译器就不会知道这种数据类型。