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

调用访问私有std::string列表的公共成员函数报错求助

问题分析与解决方案

核心错误原因

  • 成员函数调用方式错误:main中误将bestsellingcars和expensivecars当作std::list对象调用.push_back(),但它们是接受字符串参数的void成员函数,需直接传参调用。
  • 构造函数赋值逻辑颠倒:构造函数内把成员变量赋值给参数,而非反过来;且初始化carsinStock时创建了局部变量,未修改类成员。
  • 循环变量与成员变量重名:info()的for循环中,循环变量名和成员std::list同名,导致局部变量覆盖成员变量,无法正确遍历列表。
  • 缺失必要头文件:代码使用std::string、std::list、std::cout,未包含对应标准库头文件。

修正后的完整代码

#include <iostream>
#include <string>
#include <list>

using namespace std;

class carCompany{
    string name;
    string owner;
    int carsinStock;
    list<string> bestsellingCars;
    list<string> expensiveCars;
public:
    carCompany(string Name, string Owner) {
        name = Name;
        owner = Owner;
        carsinStock = 0;
    }

    void info() {
        cout << "Autocompany name: " << name << endl;
        cout << "Company Owner: " << owner << endl;
        cout << "Total cars available: " << carsinStock << endl;
        cout << "best selling cars: " << endl;
        for(const string& car : bestsellingCars) {
            cout << car << endl;
        }
        cout << "Expensive cars : " << endl;
        for(const string& car : expensiveCars) {
            cout << car << endl;
        }
    }

    void importCars() {
        carsinStock++;
    }

    void exportCars() {
        carsinStock--;
    }

    void bestsellingcars(string cars) {
        bestsellingCars.push_back(cars);
    }

    void expensivecars(string cars) {
        expensiveCars.push_back(cars);
    }    
};

int main(){
    carCompany autocomp("Tesla", "Elon Musk");
    autocomp.bestsellingcars("Tesla i");
    autocomp.expensivecars("Tesla ins");
    autocomp.info();

    carCompany rashidMotors("Rashid motors", "Rashid Abu Bakar");
    rashidMotors.bestsellingcars("Porche");
    rashidMotors.expensivecars("Porche carrera");
    rashidMotors.info();

    return 0;
}

关键修改点说明

  1. 成员函数调用修正:
    原错误写法:

    autocomp.bestsellingcars.push_back("Tesla i");
    

    修正后直接传入字符串参数:

    autocomp.bestsellingcars("Tesla i");
    

    因为bestsellingcars内部已封装push_back逻辑,无需额外调用列表方法。

  2. 构造函数修正:
    交换赋值顺序,去掉局部变量声明,直接初始化类成员变量,确保对象属性正确设置。

  3. 循环变量修正:
    将循环变量名改为car,避免与成员列表同名导致的作用域覆盖,同时使用const string&提升遍历效率。

  4. 头文件补充:
    添加<iostream>、<string>、<list>三个标准库头文件,保证标准库类型和函数可正常编译。

内容的提问来源于stack exchange,提问作者Gi Gichaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:20:39