You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指针类函数无输出?创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:12:10