У меня есть тип виртуального int_type
в code being adapted from here метод, единственный случай, когда код выдает ошибку компиляции:INT_TYPE не называя тип расстройства
‘int_type’ does not name a type
int_type ThreadLogStream::overflow(int_type v)
^.
шаги Debugging до сих пор
Если я нахожусь над любым другим экземпляром
int_type
в IDE Qt Creator, он показываетtraits_type::int_type std::basic_streambuf::int_type
, подразумевая, что каждый другой экземплярint_type
не должен быть причиной проблемы.Согласно this reference, int_type действительно принадлежит
basic_streambuf
, но называть егоTraits::int_type
не помогло.Я попытался напечатать переменную проблемы, как показано в typedefs ниже, но
char_type
иtraits_type
не были распознаны.
threadlogstream.cpp
...
int_type ThreadLogStream::overflow(int_type a)
{
int_type b = a; //This gives no errors
return b;
}
...
threadlogstream.hpp
#include <iostream>
#include <streambuf>
#include <string>
//typedef std::basic_streambuf< char_type, traits_type> base_class;
//typedef typename base_class::int_type int_type;
class ThreadLogStream : public QObject, std::basic_streambuf<char> {
Q_OBJECT
public:
ThreadLogStream(std::ostream &stream);
~ThreadLogStream();
protected:
virtual int_type overflow(int_type v); // This gives no errors
virtual std::streamsize xsputn(const char *p, std::streamsize n);
}
Пожалуйста, помогите - я теряю волосы над этим.
Это не должно компиляция, если 'int_type' не отображается в глобальном пространстве имен.Вы должны использовать квалифицированное имя для возвращаемого типа, когда функция объявлена вне класса. – AnT