2011-12-16 58 views
2

我試圖用__m128i與GCC緩存對齊矢量的值類型,我發現了以下錯誤:tbb :: cache_aligned_allocator:使用__m128i獲取「請求成員...非類類型的成員」。用戶錯誤或錯誤?

/usr/include/tbb/cache_aligned_allocator.h:105:32: error: request for member ‘~tbb::cache_aligned_allocator<__vector(2) long long int>::value_type’ in ‘* p’, which is of non-class type ‘tbb::cache_aligned_allocator<__vector(2) long long int>::value_type {aka __vector(2) long long int}’

編譯器的痕跡,它下面的行TBB/cache_aligned_allocator .H:

void destroy(pointer p) {p->~value_type();} 

這裏是觸發編譯器錯誤代碼:

#include <vector> 
#include <emmintrin.h> 
#include <tbb/cache_aligned_allocator.h> 

int main() 
{ 
    std::vector<int, tbb::cache_aligned_allocator<int> > success; 
    std::vector<__m128i, tbb::cache_aligned_allocator<__m128i> > failure; 
    return 0; 
} 

據Debian的版本,我的GCC的版本是4.6.1-2,並我的TBB版本是3.0 + r147-1。 這是線程構建模塊中的錯誤,還是我濫用了一些東西?

+0

請耐心等待...我試圖編輯以獲得正確的格式。 – 2011-12-16 03:20:56

+0

謝謝!我最終也在同一時間進行了與您一樣的編輯。 :D – 2011-12-16 03:26:27

回答

1

我認爲問題在於如何在gcc中實現__m128類型。它們不是C++意義上的實際類型,因爲它們既不是POD(簡單的舊數據,比如int/double/char/etc),也不是類。 vector(2) long long int標識符是gcc如何在內部引用該類型。你顯示的錯誤是由於編譯器抱怨無法找到__m128i的析構函數,因爲它不是類類型。

解決此問題的方法可能涉及創建自己的128位大小的類型,並使用這些類型的矢量。如果你願意,你可以提供一個自定義的演員操作符到__m128i類型,或者只是將一個指向矢量中第一個元素的指針指向__m128i,如果你只是想使用vector作爲一個方便的內存分配機制。

相關問題