无法将“this”指针转换为Class&

时间:2010-07-15 20:20:50

标签: c++

有人能说出为什么我在编译这个类时会遇到这个错误吗?

class C
{
public:
    void func(const C &obj)
    {
       //body
    }

private:
    int x;
};

void func2(const C &obj)
{
    obj.func(obj);
}

int main() { /*no code here yet*/}

4 个答案:

答案 0 :(得分:11)

C :: func()方法不承诺它不会修改对象,它只承诺它不会修改它的参数。修正:

   void func(const C &obj) const
    {
       // don't change any this members or the compiler complains
    }

或者使其成为静态功能。当C对象作为参数时,它确实听起来应该是这样。

答案 1 :(得分:2)

您需要将C::func(const C &obj)标记为const,因为您正在从const对象调用它。正确的签名如下所示:

void func(const C& obj) const

答案 2 :(得分:1)

问题是在func2()中你使用const对象调用非const函数(C::func())。

C::func()的签名更改为:

void func(const C &obj) const
{
    // whatever...
}

这样就可以用const对象调用它。

答案 3 :(得分:1)

由于:

this

是指向当前obj的 const 指针。

因此,您可以将func设为const:

class C
{
public:
    void func(const C &obj) const
    {
       //body
    }

private:
    int x;
};

void func2(const C &obj)
{
    obj.func(obj);
}

int main() { 
return 0;
}

OR

你可以删除 this 指针的常量,如下所示:

class C
{
public:
    void func(const C &obj)
    {
       //body
    }

private:
    int x;
};

void func2(const C &obj)
{
    (const_cast<C &>(obj)).func(obj);
}

int main() { 
return 0;
}

希望有所帮助。