![](/img/trans.png)
[英]c++ error: expected constructor, destructor, or type conversion before ‘(’ token
[英]error in c++ code “expected constructor, destructor, or type conversion before ‘(’ token” and “no matching function for call to …”
真的試圖解決錯誤,仔細檢查了一切。 請幫忙。 c++ 新手,請善待。
header 文件 (.h)
#ifndef GUARD_Optimized_quick_sort_h
#define GUARD_Optimized_quick_sort_h
#include <vector>
#include <list>
#include <iterator>
using namespace std;
template <class T> class optimized_quick_sort
{
public:
optimized_quick_sort(vector<T> array)
{
this->array = array;
}
optimized_quick_sort(list<T> array)
{
vector<T> temp(array.begin(), array.end());
this->array = temp;
}
vector<T> sort()
{
typename vector<T>::iterator begin = array.begin();
typename vector<T>::iterator end = array.end();
quick_sort(begin, end);
return array;
}
private:
vector<T> array;
int quick_sort( vector<T>::iterator , vector<T>::iterator);
int insertion_sort(vector<T>::iterator, vector<T>::iterator);
vector<T>::size_type devide(vector<T>::iterator, vector<T>::iterator );
};
#endif
.cpp 文件
#include "optimized_quick_sort.h"
#include <iostream>
using namespace std;
template <class T>
optimized_quick_sort<T>::quick_sort( vector<T>::iterator begin, vector<T>::iterator end)
{
if(iterator::distance(begin, end) <= 5)
{
this->insertion_sort(begin, end);
}
else
{
typename vector<T>::size_type devider;
devider = devide(begin, end);
quick_sort(begin + (devider+1),end);
quick_sort(begin,begin + (devider-1));
}
return 1;
}
template <class T>
optimized_quick_sort<T>::devide(vector<T>::iterator begin, vector<T>::iterator end)
{
return distance(begin, end)/2;
}
template <class T>
optimized_quick_sort<T>::insertion_sort(vector<T>::iterator begin, vector<T>::iterator end)
{
return 1;
}
int main(int argc, char* argv[])
{
vector<int> vec;
int temp;
while(cin >> temp)
vec.push_back(temp);
list<int> l(vec.begin(),vec.end());
optimized_quick_sort<int> obj = optimized_quick_sort<int>(l);
vec = obj.sort();
vector<int>::iterator iter = vec.begin() ;
while(iter != vec.end())
cout << *iter++;
cout << endl;
return 1;
}
錯誤:
optimized_quick_sort.cpp:7: error: expected constructor, destructor, or type conversion before ‘(’ token
optimized_quick_sort.cpp:29: error: expected constructor, destructor, or type conversion before ‘(’ token
optimized_quick_sort.cpp:35: error: expected constructor, destructor, or type conversion before ‘(’ token
optimized_quick_sort.h: In member function ‘std::vector<T, std::allocator<_CharT> >
optimized_quick_sort<T>::sort() [with T = int]’:
optimized_quick_sort.cpp:52: instantiated from here
optimized_quick_sort.h:29: error: no matching function for call to ‘optimized_quick_sort<int>::quick_sort(__gnu_cxx::__normal_iterator<int*, std::vector<int,
std::allocator<int> > >&, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >&)’
optimized_quick_sort.h:38: note: candidates are: int optimized_quick_sort<T>::quick_sort(int&, int&) [with T = int]
您需要typename 關鍵字:
int optimized_quick_sort<T>::quick_sort(
typename vector<T>::iterator begin,
typename vector<T>::iterator end)
{
...
}
另外,誰說迭代器是可以使用::
on 的 class ? 它可能只是一個指針。
iterator::distance(begin, end) <= 5
距離在標准命名空間中,而不是迭代器 class。
std::distance(begin, end) <= 5
您在所有typename
實現中都缺少返回類型,以及迭代器的一個小類型名,例如:
template <class T>
int optimized_quick_sort<T>::quick_sort( typename vector<T>::iterator begin, typename vector<T>::iterator end)
^^^ ^^^^^^^^ ^^^^^^^^
{
// ...
}
另外,作為設計技巧,直接在 ctor-initializer 中初始化你的東西:
optimized_quick_sort(vector<T> array)
: array(array)
{ //^^^^^
}
optimized_quick_sort(list<T> array)
: array(array.begin(), array.end())
{ //^^^^^
}
除了 Armen 和 Xeo 向您指出的有關typename
的內容外,您還應該將 class 方法的實現與 class 聲明放在同一個文件中(全部在一個標題中)。
換句話說,將GUARDOptimizedquicksort.cpp
移動到GUARDOptimizedquicksort.h
中並從項目中刪除.cpp
文件。
有關詳細信息,請參閱C++ 常見問題解答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.