使用另一个 class 的 typedef 成员时出现 C++ 编译错误
C++ Compilation error when using typedef'ed members of another class
下面的代码有什么问题。
我收到编译错误。
我也尝试过 class B 的前向声明。但未能成功。
Test.cpp
#include <memory>
#include <iostream>
namespace api
{
class A
{
public:
typedef std::shared_ptr<A> APtr;
APtr get_a_ptr();
B::BPtr get_b_ptr();
};
class B
{
public:
typedef std::shared_ptr<B> BPtr;
BPtr get_b_ptr();
A::APtr get_a_ptr();
};
}
int main(int argc, char **argv)
{
return 0;
}
这样做:
namespace api
{
class B; // forward declaration
class A
{
public:
typedef std::shared_ptr<A> APtr;
APtr get_a_ptr();
std::shared_ptr<B> get_b_ptr();
};
...
}
问题是您正在向 class B
请求尚未定义的内容。所以使用 std::shared_ptr<B>
你会没事的。
更多信息,请阅读:When can I use a forward declaration?
您的代码中的问题是 B::BPtr
没有在 class 声明之前声明。你应该在使用它之前声明 BPtr
。例如:
class B;
class A;
typedef std::shared_ptr<B> BPtr;
typedef std::shared_ptr<A> APtr;
class A
{
public:
APtr get_a_ptr();
BPtr get_b_ptr();
};
class B
{
public:
BPtr get_b_ptr();
APtr get_a_ptr();
};
请记住,在完整的 class 声明之前,您不能将 operator*
和 operator->
与 shared_ptr
一起使用。
下面的代码有什么问题。 我收到编译错误。 我也尝试过 class B 的前向声明。但未能成功。
Test.cpp
#include <memory>
#include <iostream>
namespace api
{
class A
{
public:
typedef std::shared_ptr<A> APtr;
APtr get_a_ptr();
B::BPtr get_b_ptr();
};
class B
{
public:
typedef std::shared_ptr<B> BPtr;
BPtr get_b_ptr();
A::APtr get_a_ptr();
};
}
int main(int argc, char **argv)
{
return 0;
}
这样做:
namespace api
{
class B; // forward declaration
class A
{
public:
typedef std::shared_ptr<A> APtr;
APtr get_a_ptr();
std::shared_ptr<B> get_b_ptr();
};
...
}
问题是您正在向 class B
请求尚未定义的内容。所以使用 std::shared_ptr<B>
你会没事的。
更多信息,请阅读:When can I use a forward declaration?
您的代码中的问题是 B::BPtr
没有在 class 声明之前声明。你应该在使用它之前声明 BPtr
。例如:
class B;
class A;
typedef std::shared_ptr<B> BPtr;
typedef std::shared_ptr<A> APtr;
class A
{
public:
APtr get_a_ptr();
BPtr get_b_ptr();
};
class B
{
public:
BPtr get_b_ptr();
APtr get_a_ptr();
};
请记住,在完整的 class 声明之前,您不能将 operator*
和 operator->
与 shared_ptr
一起使用。