我正在使用MSVC10。無法在命名嵌套類時在Lambda中解析名稱
我有一個嵌套在類B
中的類C
,它又嵌套在類A
中。 B
具有C
類型的成員變量,而A
具有vector
的B
s。像這樣:
class A
{
class B
{
string foo_;
class C
{
string bar_;
} c_;
};
vector<B> b_;
};
在A
我有一個使用for_each
與拉姆達的成員函數,遍歷vector<B>
。
在這拉姆達我嘗試獲取到B
基準和C
(分別):
void A::Run()
{
for_each(b_.begin(), b_.end(), [](std::vector<B>::value_type& that)
{
const B& b = that;
cout << b.foo_;
const B::C& c = b.c_; // 'B' : is not a class or namespace name
// const A::B::C& c = b.c_; <-- THIS COMPILES
cout << c.bar_;
});
}
的代碼:const B::C& c = b.c_;
導致編譯器錯誤,「‘B’:不是類或命名空間名稱「即使編譯器沒有問題接受const B& b = that;
語言是否允許此語法?
如果將其更改爲:const A::B::C& c = b.c_;
編譯器接受它。
下面是一個完整的例子給你玩:
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void foo() {}
class A
{
public:
void Run();
struct B
{
std::string foo_;
struct C
{
std::string bar_;
} c_;
};
std::vector<B> b_;
};
void A::Run()
{
for_each(b_.begin(), b_.end(), [](std::vector<B>::value_type& that)
{
const B& b = that;
cout << b.foo_;
const B::C& c = b.c_; // 'B' : is not a class or namespace name
// const A::B::C& c = b.c_; <-- THIS COMPILES
cout << c.bar_;
});
}
int main()
{
A a;
a.Run();
}
這是什麼編譯器? –
對不起,這是MSVC10。我會更新這個問題。 –