2012-05-05 46 views
4
mutex_map[key] = PTHREAD_MUTEX_INITIALIZER; 

mutex_map是以下類型:下面的代碼生成警告

static std::map<std::string, pthread_mutex_t> mutex_map; 

在全球範圍內

我收到以下警告對於普通的C++

warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x 
相同的文件

我不完全懂得這個警告&如何解決這個問題

回答

4

您的PTHREAD_MUTEX_INITIALIZER在某種程度上等同於初始化程序列表。

在C++ 03,你可以初始化一個這樣的數組:

int arr[5] = {1,2,3,4,5}; 

通知初始化列表。然而,課程不支持這樣做。

在C++ 11中,他們添加了std::initializer_list<T>,所以這個語法是可能的。考慮以下幾點:

std::vector<int> v = {1,2,3,4,5}; 

或者,更容易:

std::vector<int> v{1,2,3,4,5}; 

那會在C++ 11,但不是C++ 03的工作,因爲在C++ 11的載體有構造函數需要一個初始化器列表參數。你也可以將它包含在你自己的課程中。需要注意的是,後者相當於以下,爲正常:

std::vector<int> v ({1,2,3,4,5}); 

這有助於說明初始化列表是一個實際的類型現在的地步。

如果你想看到Stroustrup的blurb,我指您到他的C++11 FAQ

+1

-1:與問題完全無關。這是一個系統標題... – 6502

+0

@chris任何解決方法? –

+0

@clickstefan,我沒有使用它,所以我不知道'pthread_mutex_t'是什麼,但它很可能只是初始化列表語法作爲一個簡短的方式,並且通過類的其他成員很長的路要走。 – chris

2

對於下面的解決方案工作:你需要調用

pthread_mutex_init(&mutex_map[key], NULL); 

而不是使用PTHREAD_MUTEX_INITIALIZER

+0

好的建議,最好在C++中使用它。以下警告已被刪除:「擴展初始化程序列表僅適用於C++ 11」。 –