Проблема ожидания C ++ - PullRequest
       23

Проблема ожидания C ++

4 голосов
/ 06 сентября 2011

У меня есть такой код

    if (pid > 0) {
        // Child    
    } else {
        // Parent
    }

while (wait() > 0) {}

И есть включения

#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <ctime>
#include <sys/types.h>

Но когда я пытаюсь скомпилировать его с g ++ (g++ test.cpp -o test), появляются ошибки:

lab3.cpp: In function «int main(int, char**)»:
lab3.cpp:57:18: error: no match for «operator>» in «{0} > 0»
lab3.cpp:57:18: warning: candidates are:
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_pair.h:220:67: замечание: template<class _T1, class _T2> bool std::operator>(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_iterator.h:304:46: замечание: template<class _Iterator> bool std::operator>(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_iterator.h:354:47: замечание: template<class _IteratorL, class _IteratorR> bool std::operator>(const std::reverse_iterator<_IteratorL>&, const std::reverse_iterator<_IteratorR>&)
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/basic_string.h:2548:58: замечание: template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const std::basic_string<_CharT, _Traits, _Alloc>&, const std::basic_string<_CharT, _Traits, _Alloc>&)
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/basic_string.h:2560:27: замечание: template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const std::basic_string<_CharT, _Traits, _Alloc>&, const _CharT*)
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/basic_string.h:2572:58: замечание: template<class _CharT, class _Traits, class _Alloc> bool std::operator>(const _CharT*, const std::basic_string<_CharT, _Traits, _Alloc>&)
/usr/lib/gcc/i686-redhat-linux/4.6.0/../../../../include/c++/4.6.0/bits/stl_vector.h:1303:77: замечание: template<class _Tp, class _Alloc> bool std::operator>(const std::vector<_Tp, _Alloc>&, const std::vector<_Tp, _Alloc>&)

Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 06 сентября 2011

косвенно включает в себя pull /usr/include/bits/waitstatus.h, что определяет union wait. Поскольку у вас нет объявления функции wait, C ++ видит wait () как выражение конструктора. Это означает, что wait()>0 требует operator>(const wait &,int), который, конечно, не существует. Диагностика GCC здесь не очень полезна. Добавьте sys/wait.h, чтобы получить действительный прототип для функции ожидания.

2 голосов
/ 06 сентября 2011

wait() определяется в sys/wait.h.

Но, вероятно, там происходит что-то еще, чего мы не можем увидеть в коде, который вы опубликовали.

Попробуйте изменить это на:

while (::wait() > 0) ...

, чтобы убедиться, что вы вызываете функцию wait() из глобального пространства имен, а не какой-либо другой класс или конструкцию, импортированную из другого места.

...