回 帖 发 新 帖 刷新版面

主题:谁帮我看看语法错误

谁帮我看看下面代码,语法错在哪里?
我用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个回复)

沙发

改了下,不知道你为何那么做? 不就是要找到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]改了下,不知道你为何那么做? 不就是要找到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 楼

难道是g++编译器,有问题

4 楼

#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 楼

> 楼主
>  谁帮我看看下面代码,语法错在哪里?
> 我用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 楼

我上面的程序来自《数据结构 C++语言描述--应用标准模板库(STL)(第2版).pdf》
难道这本书上的程序已经跟不上g++编译器了?

我来回复

您尚未登录,请登录后再回复。点此登录或注册