2015-01-07 64 views
1

下面的代碼編譯罰款和運行正常:VS2013是有與基類具名命名空間是麻煩

#include <iostream> 

namespace 
{ 
    struct Base 
    { 
     void print() const { std::cout << "test"; }; 
    }; 
}; 

class Derived : public Base 
{ 
}; 

int main() 
{ 
    Derived d; 
    d.print(); 
    return 0; 
} 

但是,使用快速監視運行時在d看時,智能感知似乎無法找到 基地。

我解決了這個問題,把Base放在一個命名的命名空間中,而不是一個未命名的。

那麼它是Visual Studio中的一個錯誤,還是我錯過了某些東西?

回答

4

有關匿名命名空間的這個問題一直是VC++中的一個問題 - 請參閱http://msdn.microsoft.com/en-us/library/0888kc6a%28VS.80%29.aspx。來自鏈接文檔:

本地C++表達式計算器不支持匿名命名空間。

觀看該示例中的符號檢驗的唯一方法是使用修飾名:

例如(int*)[email protected][email protected]@@3HA(使用示例中給出的命名空間層次來說明這一點)。只需使用裝飾的名字?這很方便!謝謝,微軟。

+0

奇怪的是,他們稱*「mangled」*名稱*「裝飾」* – Drop

+0

@Drop:它讓你想知道「Standard」的內部詞是什麼。 – frasnian