私はクラス定義で "typedef"を使用していますが、このクラスが異なる位置で発生すると、異なる動作をし、エラーが発生する可能性があります。次のコードを確認してください。異なる部分に定義された "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;
};
コードが順番に解析されるため(上から下へ)最初のバージョンでは、Bは前方宣言されており、typedefは知られていません。 2番目のバージョンでは、typedefが使用される前にBが完了しています。 – Hayt