指针类函数无输出?创建node类指针数组调用print_val()报错求助
问题分析与修复方案
嘿,我一眼就瞅到你代码里的问题啦——导致编译错误的核心原因是你试图用cout输出一个void类型的函数返回值,咱们一步步来解决:
核心错误点
你的node::print_val()函数定义是:
void print_val(){ cout<<val; }
它的返回类型是void,也就是说这个函数本身已经完成了输出操作,不需要再用cout<<去包裹调用。但你在main函数里写了:
cout<<table[i]->print_val();
C++编译器根本不知道怎么处理void类型的输出,这就是你遇到无法理解错误的根源。
修复后的完整代码
只需要把那行错误的输出代码改成直接调用函数就行,另外我给你加了换行让输出更易读,顺便补上了内存释放的代码(避免内存泄漏,这是好习惯):
#include<iostream> using namespace std; class node { int val; node *next; public: node(int x){ val=x; next=NULL; } void print_val(){ cout<<val<<endl; // 加个换行,输出更清晰 } }; int main(){ node **table=new node*[7]; for(int i=0;i<7;i++){ int x; cin>>x; node *temp=new node(x); table[i]=temp; } // 修正:直接调用print_val,不用cout<< for (int i=0;i<7;++i){ table[i]->print_val(); } // 释放内存,避免泄漏 for(int i=0;i<7;i++){ delete table[i]; } delete[] table; return 0; }
额外提示
- 你代码里的
node *object=new node(5);和object->print_val();其实没起到实际作用,如果不需要可以删掉; - 用
new分配的内存一定要记得用delete释放,数组要用delete[],不然会造成内存泄漏; - 如果希望
print_val()可以被cout输出,也可以把函数返回类型改成int,比如:
这样就能用int print_val(){ return val; }cout<<table[i]->print_val()<<endl;来输出了,两种写法都可行,看你的需求选择。
内容的提问来源于stack exchange,提问作者Ishaan Kalsi
相关产品推荐
相关产品推荐

