在linux上编译libfacebookcpp,没有声明'StringBuilder'

时间:2012-11-12 04:26:03

标签: c++ linux makefile

编译时,会发生错误:

PagingInfo.hpp:35: error: ‘StringBuilder’ was not declared in this scope.

我已经包含了正确的头文件,但为什么编译器找不到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_

1 个答案:

答案 0 :(得分:1)

当我添加足够的骨架代码以解决ideone中的问题时,我得到了一个不同的错误:

  

prog.cpp:错误:'operator&lt;&lt;'不匹配在'StringBuilder()&lt;&lt; ((const LibFacebookCpp :: PagingInfo *)this) - &gt; LibFacebookCpp :: PagingInfo :: offset'

您的StringBuilder类没有&lt;&lt;运营商定义。为了使用:

StringBuilder() << offset;

您需要定义一个。

在你我之间,字符串流有大约15个运算符的重载(每个基本类型一个)。重新实施所有这些将是一个巨大的浪费时间。只需使用stringstream