Ошибка std::auto_ptr
Для приведенного ниже кода C++ я получаю ошибку компилятора:
class Mkt
{
int k;
public:
Mkt(int n): k(n)
{
throw;
}
~Mkt()
{
cout<<"\n\nINSIDE Mkt DTOR function:\t"<<endl;
}
void func1()
{
cout<<"\n\nINSIDE FUNC1 function....value of k is:\t"<<k<<endl;
}
};
int main(int argc, char* argv[] )
{
try
{
std::auto_ptr<Mkt> obj(new Mkt(10)); //no implicit conversion
obj.func1(); //error C2039: 'func1' : is not a member of 'std::auto_ptr<_Ty>'
}
catch(...)
{
cout<<"\n\nINSIDE EXCEPTION HANDLER..........."<<endl;
}
return 0;
}
Я не могу понять, почему я получаю ошибку C2039? Я использую VS 2008 компилятор.
Пожалуйста, помогите. Спасибо
4 ответа
Это auto_ptr
, это значит, что это указатель:). Вы должны использовать operator->
:
obj->func1();
Вы должны использовать ->
obj->func1();
auto_ptr
не имеет func1()
, но это имеет operator ->()
это даст Mkt*
указатель хранится внутри, а затем ->
будет использоваться снова на этом указателе, и это вызовет Mkt::func1()
функция-член.
Помните, что после того, как вы исправите проблему компиляции (смените точечный оператор на -> оператор), вы столкнетесь с огромной проблемой во время выполнения.
Mkt(int n): k(n)
{
throw;
}
throw
без аргумента предназначен для использования внутри catch-блоков и вызывает повторное появление обработанного исключения. Вызванный вне catch-блоков приведет к вызову abort
функция и ваша программа завершения. Вы, вероятно, имели в виду что-то вроде
throw std::exception();
или лучше,
throw AnExceptionDefinedByYou();
Это очень простая вещь в C++ . Auto_ptr - "ptr" означает "указатель",