在std错误的命名空间中没有名为“bind”的成员

时间:2013-06-13 14:10:40

标签: c++ xcode xcode4

以下代码可以在WINDOWS和LINUX中很好地运行但在MAC中失败:

template <typename T>
inline bool similar_fun(const std::vector<T> &a, const std::vector<T> &B, T threshold)
{
    using namespace std::placeholders;

    std::vector<T> differ;
    std::transform(a.begin(), a.end(), b.begin(),
        std::back_inserter(differ), std::bind(sub_fun<T>, _1, _2));

    return (std::accumulate(differ.begin(), differ.end(), static_cast<T>(0), Norm2<T>()) <= threshold);
}

开发平台是Xcode 4,编译器是Clang LLVM 1.0。我还确保编译器使用新的C ++标准c ++ 0x。错误消息如下:

   using namespace std::placeholders; *Expect namespace name
std::bind(sub_fun) *No member named "bind" in namespace std

1 个答案:

答案 0 :(得分:1)

Clang LLVM 1.0似乎很旧,它是从2003年开始的,所以你安装的标准库可能是一个没有placeholdersbind的C ++ 03标准库。您可以尝试包含新的C ++ 11标头,例如<array>确认。

如果我是对的,只需更新您的编译器: - )