Expected primary-expression before ‘]’ token(bisection search)
这件事我哪里做错了?当我编译这个的时候~
bs_01.cpp: In function ‘int main()’:
bs_01.cpp:29:25: error: expected primary-expression before ‘]’ token
cout << bisection_01(foo[]);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include"std_lib_facilities.h" using namespace std; template <class T> void bisection_01(T foo[]) { int low, high,mid; low = 0; high = (foo.size()-1); mid = (high+low)/2; while(low!=high) { if (foo[mid]==0) if (foo[mid+1]==0) low = mid; else cout<<"The change has occured from"<<mid+1<<" to"<<mid+2; if (foo[mid]==1) if(foo[mid-1]==1) high = mid; else cout<<"The change has occured from"<<mid<<" to"<<mid+1; } } int main() { int foo[7] {0, 0, 0, 0, 1, 1, 1}; cout<<bisection_01(foo[]); } |
不能将
此代码编译并似乎按您的需要执行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <iostream> #include using namespace std; template <class T, size_t size> void bisection_01(std::array<T,size> foo) { int low, high,mid; low = 0; high = (size-1); mid = (high+low)/2; while(low!=high) { if (foo[mid]==0) { if (foo[mid + 1] == 0) low = mid; else std::cout <<"The change has occured from" << mid + 1 <<" to" << mid + 2; } if (foo[mid]==1) { if (foo[mid - 1] == 1) high = mid; else std::cout <<"The change has occured from" << mid <<" to" << mid + 1; } } } int main() { std::array<int,7> foo{0, 0, 0, 0, 1, 1, 1}; bisection_01(foo); } |