0

コンパイルすると、エラーが発生します。

PagingInfo.hpp:35: エラー: 'StringBuilder' はこのスコープで宣言されていません。

正しい head ファイルをインクルードしましたが、コンパイラが の定義を見つけられないのはなぜ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_
4

1 に答える 1

1

これをideoneの問題だけに落とし込むのに十分なスケルトン コードを追加すると、別のエラーが発生します。

prog.cpp: エラー: 「StringBuilder() << ((const LibFacebookCpp::PagingInfo*)this)->LibFacebookCpp::PagingInfo::offset」の「operator<<」に一致しません

StringBuilder クラスに << 演算子が定義されていません。使用するには:

StringBuilder() << offset;

いずれかを定義する必要があります。

あなたと私の間には、文字列ストリーム用のその演算子の約 15 のオーバーロードがあります (すべてのプリミティブ型に 1 つ)。それらすべてを再実装するのは、膨大な時間の無駄です。を使用するだけstringstreamです。

于 2012-11-12T04:41:16.743 に答える