我正在使用 MSVC10。
我有一个C
嵌套在 class 中的类B
,而后者又嵌套在 class 中A
。 有一个类型为B
的成员变量C
,并且A
有一个s。像这样:vector
B
class A
{
class B
{
string foo_;
class C
{
string bar_;
} c_;
};
vector<B> b_;
};
在A
我有一个for_each
与 lambda 一起使用的成员函数,用于遍历vector<B>
.
在那个 lambda 中,我尝试获取对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();
}