2012-11-12 48 views
0

编译时,它会出现一个错误:编译libfacebookcpp,“StringBuilder的”未声明

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

我已经inlude正确的头文件,但为什么编译器无法找到StringBuilder的difinition?

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_ 
+0

没有压痕?请告诉我你的代码实际上并不像这样。另外,为什么你需要一个stringstream包装? – Wug

回答

1

当我补充足够的骨架代码得到这个下降到只有你在ideone的问题,我得到一个不同的错误:

prog.cpp: error: no match for 'operator<<' in 'StringBuilder() << ((const LibFacebookCpp::PagingInfo*)this)->LibFacebookCpp::PagingInfo::offset'

您的StringBuilder类没有< <运算符定义。为了使用:

StringBuilder() << offset; 

您将需要定义一个。

在你和我之间,对于stringstream(每个基本类型都有一个),该操作符有15个重载。重新实现它们将是一个巨大的浪费时间。只需使用stringstream即可。

+0

哦,对不起,我忽略了代码的功能太长了。谢谢。我在Mac x86_64上编译libfacebookcpp。所以很多错误。 – kuangi

+0

请包括它。并认真地重新考虑使用stringbuilder包装。 – Wug

相关问题