2014-01-15 73 views
1

試圖找出如何從Objective-C++中使用BGL。有什麼不對勁。重新制作步驟:如何從Objective-C++使用Boost圖庫?

  1. 新可可應用程序項目。
  2. 重命名MyAppDelegate.m到MyAppDelegate.mm
  3. 添加#include <boost/shared_ptr.hpp>到MyAppDelegate.mm(工精細,假設你有你的頭搜索路徑設置正確。)
  4. 添加#include <boost/graph/adjacency_list.hpp>到MyAppDelegate.mm

boost/graph/adjacency_list.hpp傳遞地包含的某些內容與Cocoa頭文件正在傳遞導入的一些舊的Carbon頭相碰撞。下面是輸出我看到(的第一個錯誤的價值無論如何):

In file included from /Users/me/Documents/Projects/BoostTest/BoostTest/MyAppDelegate.mm:10: 
In file included from /Users/me/Documents/Projects/BoostTest/boost/graph/adjacency_list.hpp:33: 
In file included from /Users/me/Documents/Projects/BoostTest/boost/graph/graph_traits.hpp:27: 
In file included from /Users/me/Documents/Projects/BoostTest/boost/pending/property.hpp:13: 
In file included from /Users/me/Documents/Projects/BoostTest/boost/type_traits.hpp:35: 
In file included from /Users/me/Documents/Projects/BoostTest/boost/type_traits/has_operator.hpp:12: 
In file included from /Users/me/Documents/Projects/BoostTest/boost/type_traits/has_bit_and.hpp:43: 
/Users/me/Documents/Projects/BoostTest/boost/type_traits/detail/has_binary_operator.hpp:154:42: error: expected member name or ';' after declaration specifiers 
    static ::boost::type_traits::yes_type check(has_operator); // this version is preferred when operator exists 
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
In file included from /Users/me/Documents/Projects/BoostTest/BoostTest/MyAppDelegate.mm:9: 
In file included from /Users/me/Documents/Projects/BoostTest/BoostTest/MyAppDelegate.h:9: 
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Cocoa.framework/Headers/Cocoa.h:12: 
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:76: 
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSURLError.h:12: 
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/CoreServices.framework/Headers/CoreServices.h:23: 
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers/AE.h:20: 
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/CarbonCore.h:115: 
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Headers/Debugging.h:212: 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/AssertMacros.h:1291:28: note: expanded from macro 'check' 
     #define check(assertion) __Check(assertion) 
           ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/AssertMacros.h:280:5: note: expanded from macro '__Check' 
        do                  \ 
       ^

如果我包括MyAppDelegate.mm事情將編譯<Cocoa/Cocoa.h>之前從該項目的前綴頭取出#import <Cocoa/Cocoa.h>,然後#include <boost/graph/adjacency_list.hpp>,但這是分 - 最優/不希望的。

有沒有簡單的我可以做的(理想情況下在前綴頭部,所以我不必這樣做到處),使可可標題和BGL標題和平共處?

回答

1

應該在詢問前多點搜索epsilon。剛剛發佈此之後,我發現這this page解釋說,添加以下行包括可可頭之前,將這樣的伎倆:

#define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 

我曾試圖這樣做,在我個人MyAppDelegate.mm文件,它沒有工作,但那是因爲前綴頭。將它添加到項目的前綴標題之前,它包含Cocoa/Cocoa.h做了竅門。