c++ - 实例变量值无法正确打印

标签 c++ oop

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

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。不使用 [] 运算符,而是使用 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/

相关文章:

c++ - 根据程序员的哲学,我想知道在哪里声明变量

C++函数返回静态数组地址

Powershell 从重写函数调用基类函数

java - java中从父类(super class)引用子类

c++ - 在带有 libstdc++ 的 Linux 上使用 -fsanitize=memory 和 clang

c++ - 数组和值的模板声明

c++ - 使用大括号将临时值初始化为静态数据成员的初始化程序会导致错误

javascript - 在函数内部调用函数

c++ - 是为每个对象创建单独的函数还是为每个类创建一个函数?

java - 包含集合的 Web 应用程序域对象是否应该具有 "add"和 "remove"项目方法?