我正在使用 MSVC10。
我有一个C嵌套在 class 中的类B,而后者又嵌套在 class 中A。 有一个类型为B的成员变量C,并且A有一个s。像这样:vectorB
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();
}