对于下面的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编译器。
请帮助。 感谢
答案 0 :(得分:6)
它是auto_ptr
,这意味着它是指针:)。您必须使用operator->
:
obj->func1();
答案 1 :(得分:5)
您必须使用->
obj->func1();
auto_ptr
没有func1()
,但它有operator ->()
会产生一个存储在里面的Mkt*
指针,然后会再次使用->
该指针将调用Mkt::func1()
成员函数。
答案 2 :(得分:2)
请注意,在修复编译问题(将dot-operator更改为 - &gt;运算符)后,您将遇到巨大的运行时问题。
Mkt(int n): k(n)
{
throw;
}
没有参数的 throw
意味着在catch-blocks中使用并导致重新抛出处理异常。在catch-blocks外部调用将导致调用abort
函数并终止程序。
你可能意味着像
throw std::exception();
或者更好,
throw AnExceptionDefinedByYou();
答案 3 :(得分:1)
这是c ++中非常基本的东西.. auto_ptr - “ptr”代表“指针”,