3

对于以下 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

4 回答 4

6

它是auto_ptr,这意味着它是指针:)。您必须使用operator->

obj->func1();
于 2011-03-30T09:01:36.817 回答
5

你必须使用->

obj->func1();

auto_ptr没有func1(),但它operator ->()会产生一个Mkt*存储在内部的指针,然后->将在该指针上再次使用,这将调用Mkt::func1()成员函数。

于 2011-03-30T09:01:54.403 回答
2

请注意,在您修复编译问题(将点运算符更改为 -> 运算符)后,您将遇到巨大的运行时问题。

Mkt(int n): k(n)
{
    throw;
}

throw没有参数意味着在 catch 块内使用并导致重新抛出已处理的异常。在 catch 块之外调用将导致abort函数调用和程序终止。你可能的意思是

throw std::exception();

或更好,

throw AnExceptionDefinedByYou();
于 2011-03-30T09:25:59.797 回答
1

这是c ++中非常基本的东西.. auto_ptr - “ptr”代表“指针”,

于 2011-04-19T19:19:01.883 回答