2011-05-17 490 views
0

我是Visual C++新手。項目中缺少guiddef.h

我想使用庫中的這反過來又使用另一個庫B.當我嘗試包括A的頭,我得到一個「錯誤C2061:語法錯誤:標識符‘GUID’」。此錯誤在庫B的頭文件中觸發。當我檢查引發該錯誤的行時,問題是庫B中的頭文件使用Guiddef.h中的一個定義,該文件是Microsoft頭文件。

的問題是,我似乎無法能夠添加這個頭或創建一個項目,增加了它。

我使用Visual Studio 2010的溢價。

什麼我做錯了任何想法?

+0

當錯誤消息打開guiddef.h文件時,頭文件已包含#included。你*真的應該發佈一些repro代碼。確保'#include '在任何其他事情之前。 – 2011-05-17 23:31:00

+0

我沒有發佈任何代碼,因爲我懷疑這是某個配置的問題,因爲使用庫B的項目之一確實包含了guiddef.h,但第二個沒有。正如我所說的,我是Visual C++的新手,所以我追求VS UI給我的信息。 :) – 2011-05-18 23:37:23

回答

2

不知道你的意思是將它添加到項目中或創建一個項目,但是當你的系統上有guiddef.h,並且你的MSVC環境的目錄(在公共屬性中)是正確設置的時候,你只需在將lib-headerfiles包括到cpp或h文件之前添加#include <guiddef.h>,並且所有內容都將(應該)很好。

+0

這工作。謝謝:) – 2011-05-17 23:32:09

+0

哦 - 我認爲「添加此標題」意味着這一點。 @Hugo:對不起,你可能從我的企圖答案中抽出了很長的彎彎曲曲...... – 2011-05-18 00:01:59

+0

@Hugo:@Michael:向源\頭文件添加頭文件意味着#include。但是當它被用作添加到項目中時,還不清楚它是什麼意思(可以在Source Explorer中添加到頭文件部分?) – 2011-05-18 00:42:13

1

guiddef.h是Windows SDK的一部分。如果您擁有VS 2010 Express,則不包含SDK,您需要單獨下載。

如果您使用Express以上的VS SKU,則SDK應該已經安裝(我不知道是否可以在停用時取消選擇)。默認情況下,它會進入:

C:\Program Files\Microsoft SDKs\Windows\v7.0A\ 

的「Visual Studio命令提示符」那VS安裝應設置適當的INCLUDE環境變量的快捷方式。一個默認的C++項目也應該有適當的包含路徑設置,但是它可以在項目的「VC++目錄」屬性中更改(你應該檢查它)。如果你在這裏有每個項目的設置是錯誤的,請在那裏更改它。但是,如果每個(或至少大多數)C++項目繼承的'IDE範圍''VC++目錄屬性混亂了,請按照此博客文章中的說明修復VS 2010中的全局VC++目錄設置:

具體做法是:

如果你打開屬性管理器視圖以查看屬性與您的項目相關的工作表,您會看到其中一個屬性工作表被命名爲Microsoft.Cpp.Win32.User。此屬性表實際上是存儲在LocalAppData,就像VCComponents.dat文件是,在目錄%LocalAppData%\Microsoft\VisualStudio\10.0。使用屬性表上的屬性編輯器(只需右鍵單擊此屬性表節點並選擇屬性...),您可以看到您可以直接對此文件進行編輯。由於所有項目默認情況下都會導入此屬性表,因此您可以像以前一樣有效地編輯VC++目錄。

+0

不,我沒有使用Express。我正在使用Premium。標題在另一個項目中正確添加。 – 2011-05-17 22:48:53

+0

是的;在本說明中,在您的問題中包含您使用的Visual Studio版本(Express與零售版本)可能是一個好主意。快速版本排除了像SDK這樣的東西,MFC或者其他可能被認爲是視覺工作室的一部分的東西。 – Joe 2011-05-17 22:49:53

+0

感謝您的意見。我只是繼續幷包含這些信息。 – 2011-05-17 22:53:50

1

您可能(雖然不一定是真的)需要包含一個庫作爲鏈接器依賴項。我在此假設你已經在使用的#include(並有正確的情況下,以一個小寫的「g」)

我的建議:

  1. 打開具有 項目報頭包括
  2. 打開「項目」菜單,並選擇 「屬性」
  3. 在「配置屬性」 選擇「連接子」
  4. 下「連接子」 SELEC t'輸入'
  5. 查看'附加 依賴關係'字段(右側爲 頂部)。您可能會看到一些列在那裏的圖書館。
  6. 記下作爲依存關係包含的任何庫 ,並在您的「損壞的」 項目中重複執行 這些步驟。如果需要的話,將相應的庫添加到「已損壞」的項目中。

在兩個項目中,您可能不需要相同的依賴項,但是如果確實需要鏈接borked項目中的庫,則應該能夠縮小需要的範圍並將其包含在依賴列表。

希望有幫助,或者至少不會讓你離開太遠!

編輯:

實際上,對於一些在Windows API的標題,你可能無法將它們包括「單獨」(我不知道如果guiddef.h就是其中之一) ,但它們應該作爲windows.h的子頭文件包含在內。

+0

感謝您的建議。我遵循你的指示。兩個項目都有完全相同的庫,所以這不是原因。但排除這一點很好。 – 2011-05-17 23:26:45

+1

請注意,如果您使用的是MSVC,那麼您應該從源代碼中使用'#pragma comment(lib,「mylibraryname.lib」)''以確保您在某處插入某些菜單的庫設置時沒有問題如果你失去了構建設置,你不用花三年的時間擰它:)) – 2011-05-17 23:33:21

+0

@Billy ONeal這是一個很棒的提示!我沒有想到=) – Joe 2011-05-18 01:29:59