2013-11-25 22 views
1

我正在爲移動機器人編寫一個.lib文件。 在關於機器人的運動等命令,我也有命令掃描藍牙設備看起來像:靜態庫頭中的void函數的問題

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命令相同的方式。我是否必須以某種方式在頭文件struct Device中聲明?

+0

您可能需要'#include '或'Device'的頭文件。 – BoBTFish

+0

我已包含。必須是設備標題然後。謝謝。 – page47250

回答

4

我是否必須以某種方式在頭文件struct Device中聲明?

如果要爲Device創建向量,則需要讓編譯器通過定義它來了解類的大小。正如BoBTFish指出的那樣,通常的方法是隻包含Device.h頭(或類似)。如果你使用指針(vector<Device*>或甚至更好,適當類型的智能指針:vector<shared_ptr<Device>>)前向聲明(只需說明class Device;)就足夠了,因爲編譯器知道你的體系結構上指針的大小。 (請注意,這是完全不同的方法與不同的語義比在你的問題,這只是一個側面說明)。

+0

@Angew是啊 - 我注意到在評論前幾秒鐘!感謝您的建議 - 我會添加附加說明! –

+0

謝謝你Nemanja。因此,使用我的方法,我必須創建頭文件Device.h,在其中描述struct。之後,我將Device.h包含到庫頭文件中? – page47250

+0

@ page47250不客氣!是的 - 那正是你需要做的。 –

0

如果您的頭文件不包括(直接或間接),則需要爲矢量類添加#include <vector>到頭文件。沒有提供正確的信息,編譯器就不知道這種數據類型。