2010-04-20 207 views
8

我有一个函数,需要const some_type**作为参数(some_type是一个结构,并且该函数需要一个指向这种类型的数组的指针)。我声明了some_type*类型的局部变量,并初始化它。然后,我调用该函数为f(&some_array),编译器(GCC)说:'从some_type **无效转换为const some_type **'

error: invalid conversion from ‘some_type**’ to ‘const some_type**’ 

这里有什么问题吗?为什么我不能将一个变量转换为const?

回答

1

你可能需要指定一些更多的上下文,例如是参数传入或传出(或两者?)函数?

尝试使您的变量常量,以及:

some_type const *some_array = ....; 

该读作 “some_array是一个指向一个const some_type”。代码无法修改指向的内容。所以你必须在将它传递给函数之前声明你的变量const。

(编辑...)

+1

“否” :)(http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.17) – Constantin 2010-04-20 08:55:30

+0

呵呵。即使它没有解决关于“为什么”的问题,这被标记为公认的答案? =( – jamesdlin 2010-04-20 08:59:58

1

您有几种选择来解决什么jamesdlin在他的回答中概述。

您可以使用中间变量。

some_type const* const_some_array = some_array; 
f(&const_some_array); 

您可以更改f的参数。

void f(some_type const* const* some_array); 
相关问题