2016-02-15 75 views
1

我想了解std::bind。我寫了下面的程序。g ++錯誤:'佔位符'不是使用名稱空間的命名空間名稱std ::佔位符;

#include <memory>                                                 
#include <functional> 
#include <iostream> 
#include <algorithm> 

using namespace std::placeholders; 

int add(int first,int second) 
{ 
    return first + second; 

} 

bool divisible(int num, int den) 
{ 
    if (num %den == 0) 
    return true; 
    return false; 
} 

int approach_1() 
{ 
    int arr[10] = {1,20,13,4,5,6,10,28,19,15}; 
    int count = 0; 

    for (int i = 0; i < sizeof(arr)/sizeof(int); i++) 
    { 
    if(divisible(arr[i],5)) 
     count++; 
    } 
} 

int approach_2() 
{ 
    int arr[10] = {1,20,13,4,5,6,10,28,19,15}; 
    return count_if(arr,arr + sizeof(arr)/sizeof(int), std::bind(divisible,_1,5)); 
} 

出於某種原因,我的G ++編譯器不能識別std::placeholders namesapce。

這些是我得到的錯誤。

std_bind.cpp:6:22: error: ‘placeholders’ is not a namespace-name 
using namespace std::placeholders; 
        ^
std_bind.cpp:6:34: error: expected namespace-name before ‘;’ token 
using namespace std::placeholders; 
           ^
std_bind.cpp: In function ‘int approach_2()’: 
std_bind.cpp:36:54: error: ‘bind’ is not a member of ‘std’ 
    return count_if(arr,arr + sizeof(arr)/sizeof(int), std::bind(divisible,_1,5)); 
                ^
std_bind.cpp:36:74: error: ‘_1’ was not declared in this scope 
    return count_if(arr,arr + sizeof(arr)/sizeof(int), std::bind(divisible,_1,5)); 
                     ^
std_bind.cpp:36:79: error: ‘count_if’ was not declared in this scope 
    return count_if(arr,arr + sizeof(arr)/sizeof(int), std::bind(divisible,_1,5)); 
                      ^
std_bind.cpp:36:79: note: suggested alternative: 
In file included from /usr/include/c++/4.9/algorithm:62:0, 
       from std_bind.cpp:4: 
/usr/include/c++/4.9/bits/stl_algo.h:3970:5: note: ‘std::count_if’ 
    count_if(_InputIterator __first, _InputIterator __last, _Predicate __pred) 
    ^
+0

@ M.M - 這表示感謝。 – liv2hak

回答

1

std::placeholders加入在C++ 11,所以對於G ++必須使用一個編譯器開關,使C++ 11或更高;如-std=c++11-std=c++14

通常,當您嘗試使用C++ 11功能而不使用正確的開關時,g ++會在錯誤消息中提及;但不幸的是,這似乎並不是那些時代之一。

相關問題