C++ C++;在同一命名空间中找不到类
更新:复制错误的最小代码: 在TypeTraits.hpp中:C++ C++;在同一命名空间中找不到类,c++,namespaces,C++,Namespaces,更新:复制错误的最小代码: 在TypeTraits.hpp中: namespace fl { namespace utilities { template <class T> struct remove_reference { using type = T; }; template <class T> struct remove_ref
namespace fl
{
namespace utilities
{
template <class T>
struct remove_reference
{
using type = T;
};
template <class T>
struct remove_reference<T&>
{
using type = T;
};
template <class T>
struct remove_reference<T&&>
{
using type = T;
};
}
}
名称空间fl
{
命名空间实用程序
{
模板
结构删除\u引用
{
使用类型=T;
};
模板
结构删除\u引用
{
使用类型=T;
};
模板
结构删除\u引用
{
使用类型=T;
};
}
}
在TypeTraits.h中
#include "TypeTraits.hpp"
namespace ftd
{
template <class T> using remove_reference = fl::utilities::remove_reference<T>;
}
#包括“TypeTraits.hpp”
名称空间ftd
{
使用remove\u reference=fl::utilities::remove\u reference的模板;
}
在实用程序h中:
#include "TypeTraits.h"
namespace ftd
{
template <class T>
constexpr T&& forward(typename remove_reference<T>::type& t) noexcept
{
return static_cast<T&&>(t);
}
template <class T>
constexpr T&& forward(typename remove_reference<T>::type&& t) noexcept
{
return static_cast<T&&>(t);
}
}
#包括“TypeTraits.h”
名称空间ftd
{
模板
constexpr T&&forward(typename remove\u reference::type&T)noexcept
{
返回静态_-cast(t);
}
模板
constexpr T&&forward(typename remove_reference::type&&T)无例外
{
返回静态_-cast(t);
}
}
第一次使用正向功能:
在List.hpp中
#include "Utility.h"
namespace fl
{
namespace containers
{
struct NodeBase { /* code... */ };
/* code... */
template <class T> struct ListNode : public NodeBase
{
/* Code... */
template <class... Args>
ListNode(Args&&... args) : m_data(ftd::forward<T>(args)...) {}
/* Code... */
T m_data;
};
}
}
#包括“Utility.h”
名称空间fl
{
命名空间容器
{
结构节点库{/*代码…*/};
/*代码*/
模板结构ListNode:公共节点库
{
/*代码*/
模板
ListNode(Args&&…Args):m_数据(ftd::forward(Args)…{}
/*代码*/
T m_数据;
};
}
}
错误:没有名为“remove_reference”的模板;你是说“std::remove_reference”吗?在单独的文件中@Drew DormannA C++编译器不知道单独的文件。预处理器将用指定文件的内容替换每个
#include
语句,生成一个称为“编译单元”的字节流。也使用clang-3.5为我编译,我将它们放在单独的文件中。Drew指出,这不应该是一个问题。为了解决您的问题,您应该在单独的文件中发布一个@Drew DormannA C++编译器不知道单独的文件。预处理器将用指定文件的内容替换每个#include
语句,生成一个称为“编译单元”的字节流。也使用clang-3.5为我编译,我将它们放在单独的文件中。Drew指出,这不应该是一个问题。为了解决您的问题,您应该发布一个。