我正在使用构造函数来初始化实例变量。当我打印实例变量时,它给出了错误的输出。

int main(){
    int k[]={1,2,4};
    int hs=3;
    int n=3;
    priorityq p(k,hs,n);
    p.printKey();
}
class priorityq{
    int key[];
    int heapsize;
    int n;
public:
    void printKey();
    priorityq(int k[],int hs, int ni);
};
priorityq::priorityq(int k[],int hs, int ni){
     for(int i=0;i<ni;i++)
      key[i]=k[i];
     heapsize=hs;
     n=n_i;
}
void priorityq::printKey(){
     for(int i=0;i<heap_size;i++)
       cout<<key[i]<<" ";
     cout<<endl;
}

我希望输出是
1 2 4
但我越来越
3 3 4

最佳答案

如果您使用的是 c++,请使用 std::array ,或者更好地用于动态范围数组,请使用 std::vector 。而不是使用 [] -operator 使用 at() 方法,它检查越界错误:

编辑,构造函数中有错误

int main(){
    std::vector<int> k{1,2,4};
    int hs=3;
    int n=3;
    priorityq p(k,hs,n);
    p.printKey();
}

..
class priorityq{
    std::vector<int> key;
    int heapsize;
    int n;
public:
    void printKey();
    priorityq(std::vector<int>& k,int hs, int ni);
};

..
priorityq::priorityq(std::vector<int>& k,int hs, int ni){
     for(int i=0;i<ni;i++)
      key.push_back(k.at(i));
     heapsize=hs;
     n=n_i;
}
void priorityq::printKey(){
     for(int i=0;i<heap_size;i++)
       cout<<key.at(i)<<" ";
     cout<<endl;
}

关于c++ - 实例变量值打印不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58521534/

10-11 22:47