您好,有人可以帮我解决这个错误吗?

时间:2017-05-05 00:10:58

标签: c++ class c++11 templates const

我不明白为什么第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;。那有什么问题?

1 个答案:

答案 0 :(得分:1)

第21行的Push()

int a = 5;
int * x = &a;
stk->Push(x);

其中Push()等待const Type & valueType等于int *,如果我理解正确的话),因为您正在发送{{1}对于兼容类型的方法,int *const Type &

请注意,如果左侧没有任何内容,则会在左侧,右侧应用int * const &,因此constconst 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);

这应该有用。