我不明白为什么第21行可以,但第25行是错误的?
错误消息:
来自' const int *'的无效转换到' int *' [-fpermissive]
Push是在类中删除的功能:
template< typename Type >
class Stack {
void Push(const Type& value) {
SNode* type = new SNode();
if (this->head != nullptr) {
this->head->up = temp;
}
temp->value = value;
temp->up = nullptr;
temp->down = head;
temp->head = temp;
num_of_elements++;
}
};
int main() {
Stack<int*>* stk = new Stack<int*>();
int a = 5;
int* x = &a;
stk->Push(x); //this line is fine
const int b = 5;
const int* y = &b;
stk->Push(y); //this line is an error
delete stk;
return 0;
}
它看起来像函数Push get参数来自&#34; const int * &
&#34; ,在第25行,我完全发送一个const指针&#34; const int *
&#34;。那有什么问题?
答案 0 :(得分:1)
第21行的Push()
int a = 5;
int * x = &a;
stk->Push(x);
其中Push()
等待const Type & value
(Type
等于int *
,如果我理解正确的话),因为您正在发送{{1}对于兼容类型的方法,int *
是const Type &
。
请注意,如果左侧没有任何内容,则会在左侧,右侧应用int * const &
,因此const
为const Type &
,即Type const &
。所以是对非常数整数的常量指针的引用。
当你写(第25行int * const &
)时
Push()
您正在向等待const int b = 5;
const int * y = &b;
stk->Push(y);
的方法发送const int *
int const *
,即int * const &
(对常量整数的非常量指针)引用指向非常数整数的常量指针。
这两种类型是不兼容的,所以错误。
您可以尝试使用
int b = 5;
int * const y = &b;
stk->Push(y);
这应该有用。