2014-10-17 48 views
2

我面臨以下問題:當它們的名稱與它們返回的數據類型相同時,屬性被重命名

我的接口在C#中定義。我在我的界面中使用自定義枚舉。一些枚舉的具有相同的名稱,因爲它們返回的數據類型,例如:

Foo Foo { get; } 
Bar Bar { get; } 

我用tlbexp使用模塊中的C++。與他們的數據類型分享他們的名字 屬性從 「姓名」 到 「_Name」 改名爲:

酒吧myEnumValue = pFoo->吧//不存在

酒吧myEnumValue = PFOO - > _酒吧/ /是我的'酒吧'屬性

到目前爲止,我沒有找到任何有關文件的原因,如果/我如何能夠防止這種情況。 在構建或導出過程中,我沒有收到任何警告。 爲了讓模塊的使用直觀,我不想重命名屬性或枚舉。

任何人都可以解釋爲什麼會發生這種情況?

+1

不是C++專家,我猜這與[Color color]有關(http://blogs.msdn.com/b/ericlippert/archive/2009/07/06/color-color .aspx)問題和C++處理(不)它的方式。 – InBetween 2014-10-17 08:26:33

回答

1

在C++中,這是不允許的:因爲[basic.scope.class] 3.3.7/1

class B {}; 
class A { 
    B B; 
}; 

的名稱N的一個S類使用應指在其上下文相同的聲明,並且當重新評估在S的完整範圍內。違反此規則不需要診斷。


注意,這僅適用於一類中聲明,命名空間範圍或功能範圍的規則更加複雜 - 有時B B;是允許的,有時沒有。


更新:其實這是完全合法的:

class B {}; 
class A { 
    ::B B; 
}; 

所以,你可以嘗試讓tlbexp產生這樣的代碼。

+0

謝謝你提供的理由..你有什麼想法我可以防止這種情況嗎?根據你提供的信息,我已經讀過,我可以例如指定一個範圍來防止錯誤..我可以告訴tlbexp這樣做嗎? – 2014-10-17 09:26:23

+0

你想防止什麼?再一次,在C++類中沒有辦法獲得'Foo Foo;'。你不能「指定範圍」 - 一個類成員具有它的類的範圍。也許你可以使用[tlbexp選項](http://msdn.microsoft.com/en-us/library/hfzzah2c(v = vs.110).aspx)來獲得這些屬性的一些不同命名。 – 2014-10-17 09:44:43

+0

我想我在我提到的帖子中出了點問題。非常感謝您的回答! – 2014-10-17 09:49:17

相關問題