簡體   English   中英

“在'const'錯誤之前預期的嵌套名稱說明符”,其中typename為in g ++

[英]“expected nested-name-specifier before ‘const’ error” with typename const in g++

我在C ++中有這個代碼

template<typename T>
class DD
: public enumerables<T>

{
...
private:
    typename const DD<T>& mContainer;
}

它給了我兩個錯誤消息:

  1. 錯誤:'const'之前的預期嵌套名稱說明符
  2. 錯誤:'&'標記之前的聲明符無效

typename const代碼有什么問題? 它使用MSVC C ++編譯得很好。

添加

typename DD<T>& const mContainer; const typename DD<T>& mContainer; 給我同樣的錯誤。

嗯,那個typename什么? 您沒有引用嵌套類型,因此在那里完全沒有typename 我要說錯誤是由於不正當使用typename引起的,而不是通過聲明部分或其他任何內容的排序引起的。

它應該是公正的

const DD<T>& mContainer;

甚至

const DD& mContainer;

除了在引入模板類型參數時,關鍵字typename必須始終緊跟一個可選的global-scope :: token,然后是一個嵌套的name-specifier ; 也就是說,有一個或多個名稱空間或類,每個名稱后跟:: token。

請參閱C ++標准中的語法規則:5.2(函數樣式轉換),7.1.5.3(詳細說明的類型說明符)和7.3.3(使用聲明)。

另外,14.6p5:“關鍵字typename只能應用於限定名稱,但這些名稱不需要依賴。”

Microsoft的編譯器接受無效語法是錯誤的。

如果它幫助某人,因為我沒有看到它明確提到作為答案或評論(雖然引用C ++規范引用的答案提到它),如果你在依賴類型存在時收到此錯誤。

例如:

<template T>
void foo(typename const T::size_type & n);

修復是在typename之前移動const

<template T>
void foo(const typename T::size_type & n);

確認這適用於GCC(4.9)和MSVC(2017)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM