Error: Incomplete Type Is Not Allowed

  • Автор темы vladimir7485
  • Дата начала
V

vladimir7485

Гость
#1
Привет всем. Столкнулся со следующей проблемой. Пишу в Visual Studio 2012. Создал класс SomeException. VS автоматически добавила SomeException.h и SomeException.cpp.
SomeException.h:
Код:
#define THROW_SOME_EXCEPTION(msg) throw SomeException(_T(msg),_T(__FILE__),__LINE__);

typedef std::basic_string<TCHAR> _tstring;
typedef std::basic_stringstream<TCHAR> _tstringstream;

class SomeExсeption
{
_tstring error_str;
public:
SomeExсeption(const TCHAR *msg, TCHAR *inpfile, int inpline);
~SomeExсeption(void);
const TCHAR* what() const;
};
SomeException.cpp:
Код:
SomeExсeption::SomeExсeption(const TCHAR *msg, TCHAR *inpfile, int inpline)
{
_tstringstream ss;
ss << "Exception: " << msg;
ss << ". File: " << inpfile << " Line: " << inpline;
error_str = ss.str();
}

SomeExсeption::~SomeExсeption(void)
{
}

const TCHAR* SomeExсeption::what() const
{
return error_str.c_str();
}
Собственно, проблема: при наведении на ss (VS подчеркивает красным) появляется "Error: incomplete type is not allowed". И дальше по коду, все что связано с ss тоже подчеркивает.Что не так? Кстати, до этого этот класс был описан в одном SomeException.h файле, все было норм, реши сделать как положено вроде как, и тут на тебе...
Кстати, и доп. вопрос, не объясните, что значит это определение:
#define THROW_SOME_EXCEPTION(msg) throw SomeException(_T(msg),_T(__FILE__),__LINE__);
Спасибо!
 
R

rrrFer

Гость
#2
#define THROW_SOME_EXCEPTION(msg) throw SomeException(_T(msg),_T(__FILE__),__LINE__);

значит, что на этапе препроцессорной обработки все встретившиеся сочетания
THROW_SOME_EXCEPTION(msg)
будут заменены на throw SomeException(_T(msg),_T(__FILE__),__LINE__);