我在类定义中使用“typedef”,但是当这个类在不同的位置发生时,它的执行方式不同,可能会导致错误。请帮我查看以下代码。
此版本的代码可能会导致错误:
#include <vector>
#include <string>
class B;
class A
{
public:
A() { }
std::vector<B::size_type> vec;
};
class B
{
public:
typedef std::vector<std::string>::size_type size_type; // [Error] incomplete type 'B' used in nested name specifier
};
但以下代码正常运行:
#include <vector>
#include <string>
class B
{
public:
typedef std::vector<std::string>::size_type size_type;
};
class A
{
public:
A() { }
std::vector<B::size_type> vec;
};
答案 0 :(得分:1)
问题不在typedef
本身,而在于定义。
在第一个代码片段中,编译器不知道这个B::size_type
是什么 - 它只知道class B
存在。在后一种情况下,编译器已经知道您的typedef
,因此B::size_type
。
这种情况发生了,因为编译器&#34;读取&#34; (解析)代码逐行,定义顺序很重要。