【问题标题】:forward declaration of using in c++11在 c++11 中使用的前向声明
【发布时间】:2014-06-12 13:14:00
【问题描述】:

我正在尝试在另一个头文件中使用对象的类型别名,而不包括头文件。

我的简化版代码是:

// A.h
    #include <vector>
    using Vector=std::vector<int>;

====================================================

//B.h
using Vector;//forward declaration but not working !(Vector has not beed declared)
int foo(Vector*);

====================================================
//B.cpp
#include "A.h"
void foo(Vector*){}

我不想在B.h 中再次写using Vector=std::vector&lt;int&gt;;,因为它的定义必须与A.hVector 的定义相同,并且它可能会在未来发生变化,我可以'不包括它,因为我的代码有循环依赖

using 可以在 c++11 中前向声明吗?

【问题讨论】:

  • 你需要在#include "A.h"B.h
  • @juanchopanza 它有循环依赖。所以我不能这样做
  • 一句话,没有。不要重复声明,而是将其分解为单独的标题并包含在 A 和 B 中。
  • 你不能转发声明typedefs(你的using只是一个typedef)。
  • 你为什么不解决这个问题来表明这一点?

标签: c++ c++11 vector stl forward-declaration


【解决方案1】:

这是不可能的,但是以下可能是一种解决方法。

// Common.h
...
#include <vector>
using Vector=std::vector<int>;
...

然后您将Common.h 包含在A.hB.h 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多