我在类定义中使用“ 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;
};
问题不在typedef
于其本身,而在于定义的顺序。
在第一个代码段中,编译器不知道这是什么B::size_type
-它只知道aclass B
存在。在后一种情况下,编译器已经知道您的typedef
,因此B::size_type
。
发生这种情况是因为编译器逐行“读取”(解析)代码并且定义的顺序很重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句