主题:谁帮我看看语法错误
cmdblock
[专家分:570] 发布于 2011-05-18 18:10:00
谁帮我看看下面代码,语法错在哪里?
我用g++编译后提示如下:
D:/Dev-Cpp/bin/g++.exe -Wall -o a a.cpp -g -lm
a.cpp:8: error: expected constructor, destructor, or type conversion before "FindListOf"
a.cpp: In function `int main(int, char**)':
a.cpp:22: error: `FindListOf' was not declared in this scope
a.cpp:22: warning: unused variable 'FindListOf'
[code=c]
#include <iostream>
#include <list>
using namespace std;
template <typename T>
list<T>::iterator FindListOf(list<T>& alist, const T& value)
{
list<T>::iterator iter = alist.end();
while (iter != alist.end() && !(*iter == value))
iter--;
return iter;
}
int main(int argc, char *argv[])
{
int arr[] = {1, 2, 3, 4, 5};
int arrSize = sizeof(arr) / sizeof(int);
list<int> nList(arr, arr+arrSize);
list<int>::iterator iter;
iter = FindListOf(nList, 4);
if (iter != nList.end())
{
cout << *iter << endl;
iter++;
}
return 0;
}
[/code]
回复列表 (共6个回复)
沙发
cxxcomp [专家分:2370] 发布于 2011-05-18 22:13:00
改了下,不知道你为何那么做? 不就是要找到list中符合条件的value么?
inter c++ 编译通过。
#include <iostream>
#include <list>
using namespace std;
template <typename T>
list<T>::iterator FindListOf(list<T>& alist, const T& value)
{
list<T>::iterator iter = alist.end();
while (iter != alist.begin() && *iter != value)
iter--;
return iter;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int arrSize = sizeof(arr) / sizeof(int);
list<int> nList(arr, arr+arrSize);
list<int>::iterator iter;
iter = FindListOf(nList, 4);
/*
if (iter != nList.end())
{
cout << *iter << endl;
iter++;
}
*/
cout << *iter << endl;
return 0;
}
板凳
cmdblock [专家分:570] 发布于 2011-05-18 22:56:00
[quote]改了下,不知道你为何那么做? 不就是要找到list中符合条件的value么?
inter c++ 编译通过。
#include <iostream>
#include <list>
using namespace std;
template <typename T>
list<T>::iterator FindListOf(list<T>& alist, const T& value)
{
list<T>::iterator iter = alist.end();
while (iter != alist.begin() && *iter != value)
iter--;
return iter;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int arrSize = sizeof(arr) / sizeof(int);
list<int> nList(arr, arr+arrSize);
list<int>::iterator iter;
iter = FindListOf(nList, 4);
/*
if (iter != nList.end())
{
cout << *iter << endl;
iter++;
}
*/
cout << *iter << endl;
return 0;
}
[/quote]
我用g++依然编译通不过。
错误依然如下:
D:/Dev-Cpp/bin/g++.exe -Wall -o c c.cpp -g -lm
c.cpp:6: error: expected constructor, destructor, or type conversion before "FindListOf"
c.cpp: In function `int main()':
c.cpp:20: error: `FindListOf' was not declared in this scope
c.cpp:20: warning: unused variable 'FindListOf'
3 楼
cmdblock [专家分:570] 发布于 2011-05-18 22:58:00
难道是g++编译器,有问题
4 楼
bruceteen [专家分:42660] 发布于 2011-05-19 09:03:00
#include <list>
template<typename T>
typename std::list<T>::iterator FindListOf( std::list<T>& alist, const T& value )
{
typename std::list<T>::reverse_iterator itor = alist.rbegin();
for( ; itor!=alist.rend() && *itor!=value; ++itor );
return itor==alist.rend() ? alist.end() : (++itor).base();
}
#include <iostream>
using namespace std;
int main( int argc, char *argv[] )
{
int arr[] = { 1, 2, 3, 4, 5 };
const size_t arrsize = sizeof(arr)/sizeof(arr[0]);
list<int> nList(arr, arr+arrsize);
list<int>::iterator itor = FindListOf(nList,4);
if( itor != nList.end() )
{
cout << *itor << endl;
}
return 0;
}
5 楼
sarrow [专家分:35660] 发布于 2011-05-19 09:24:00
> 楼主
> 谁帮我看看下面代码,语法错在哪里?
> 我用g++编译后提示如下:
> D:/Dev-Cpp/bin/g++.exe -Wall -o a a.cpp -g -lm
> a.cpp:8: error: expected constructor, destructor, or type conversion before "FindListOf"
> a.cpp: In function `int main(int, char**)':
> a.cpp:22: error: `FindListOf' was not declared in this scope
> a.cpp:22: warning: unused variable 'FindListOf'
>
>
> #include <iostream>
> #include <list>
> using namespace std;
>
> template <typename T>
> list<T>::iterator FindListOf(list<T>& alist, const T& value)
> {
> list<T>::iterator iter = alist.end();
> while (iter != alist.end() && !(*iter == value))
> iter--;
> return iter;
> }
>
答案,楼上的好同志bruceteen已经给出了。
稍微提一下,对于模板的使用,为了方便编译器识别xxx<type>::domain这样的东西,到底
是成员、还是一个类型,前面需要用是否加上一个限定typename来区分。
我个人认为,不加限定,就你通过编译的编译器,在这个问题的处理上不是很合适。
这里,我顶g++。
6 楼
cmdblock [专家分:570] 发布于 2011-05-19 16:04:00
我上面的程序来自《数据结构 C++语言描述--应用标准模板库(STL)(第2版).pdf》
难道这本书上的程序已经跟不上g++编译器了?
我来回复