2017-07-11 30 views
-4

非常简单:我想指定一个函数不会改变它的指针参数。如何?又一个:C++ - 从'const type *'无效转换为'type *'

class A { 
private: 
    int *p; 
public: 
    void foo (const int *q) { 
    p = q; 
    } 
}; 

A a; 
int b = 3; 
int *c = &b; 
a.foo(c); 

仍然没有工作,感谢您的帮助!

+2

你正在接受'const int *'参数并试图将它保存在一个非''constst'变量中。错误信息正试图向您解释,请花点时间仔细阅读。 – tadman

+1

是的,你说函数*本身*不会修改'q'指向的东西。但是,然后将它保存在一个非常量指针中,以便其他*成员函数可以修改数据。 –

+1

'A = a;'这是什么?你对细节的关注度很低。 –

回答

1

好的,你已经澄清,你没有打算增加const到指针,而是指向(而这当然可以安全地删除时复制指针)。错误消息很好地表明您在该目标中失败。

的类型做的是:

int* const 

记住,const直接适用于左侧(除非有什么也没有,在这种情况下,直接适用于右侧)。

0

您正在传递'foo()'常量指针,这意味着您告诉编译器您不希望任何人更改指针所指向的数据。因此,将const指针转换为非const指针是没有意义的。然而,如果你真的想这样做'只是为了好玩',那么你可以通过'memcpy'来解决这个问题。

+0

'memcpy'会是一个奇怪的方法。 'const_cast'肯定 –

相关问题