在Linux上编译libfacebookcpp,'StringBuilder'没有声明
compile libfacebookcpp on linux , 'StringBuilder' was not declared
当编译时,会发生错误:
paginginfo.hpp:35:错误:在此范围中没有声明" StringBuilder"。
我有正确的头文件,但是为什么编译器找不到StringBuilder
的扩散?
utils.hpp:
#ifndef LIBFACEBOOKCPP_UTILS_H_
#define LIBFACEBOOKCPP_UTILS_H_
template<class TData, class TStr>
inline TData fromString(const TStr &str)
{
std::stringstream oss;
oss << str;
TData t;
oss >> t;
return t;
}
class StringBuilder
{
public:
inline operator const std::string () const
{
return oss.str();
}
private:
std::ostringstream oss;
};
#endif // LIBFACEBOOKCPP_UTILS_H_
paginginfo.hpp
#ifndef LIBFACEBOOKCPP_PAGING_INFO_H_
#define LIBFACEBOOKCPP_PAGING_INFO_H_
#include "Utils.hpp"
namespace LibFacebookCpp
{
struct PagingInfo
{
PagingInfo(unsigned int offset_, unsigned int limit_) : offset(offset_), limit(limit_) { }
bool IsValid() const { return 0 != limit; }
void GetUri(Uri *uri) const
{
LIBFACEBOOKCPP_ASSERT(uri);
uri->query_params["limit"] = StringBuilder() << offset;
uri->query_params["offset"] = StringBuilder() << limit;
}
...
};
} // namespace LibFacebookCpp
#endif // LIBFACEBOOKCPP_PAGING_INFO_H_
当我添加足够的骨架代码以将其删除到您在Ideone中的问题时,我会遇到不同的错误:
prog.cpp:错误:"操作员&lt;&lt;''无匹配在'StringBuilder()&lt;&lt;(((const libfacebookcpp :: paginginfo*)这) -> libfacebookcpp :: paginginfo :: offset'
您的StringBuilder类没有A&lt;&lt;定义运算符。为了使用:
StringBuilder() << offset;
您需要定义一个。
在您和我之间,大约有15个用于弦乐的运算符(每种原始类型)。重新进化所有这些都是巨大的浪费时间。只需使用stringstream
。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 在函数内部的声明中初始化数组,并在外部使用它
- Visual Studio中的函数声明和函数定义问题
- c++类声明时,相同的例程,不同的成员变量类型
- 在Linux上编译libfacebookcpp,'StringBuilder'没有声明