You need to enable JavaScript to run this app. C++多次向类构造函数传参不生效问题如何解决
优惠活动
大模型
产品
解决方案
定价
更多

C++多次向类构造函数传参不生效问题如何解决

问题原因分析

你遇到的报错本质是同一作用域下的变量重复定义错误,和Rectangle类的构造函数本身没有关联:
C++语法规定,同一个作用域内不允许声明两个名称完全相同的变量,你在main函数的全局作用域里两次定义了名为rect的Rectangle类对象,编译器识别到重名变量后会直接抛出编译错误,所以第二次定义看起来没有生效。

可行解决方案

根据使用场景可以选择以下三种常用方案:

  • 方案1:为第二个Rectangle对象设置不同的变量名,是最常用的实现方式
#include<iostream>
#include<string>
using namespace std;

class Rectangle
{
public:
Rectangle(int length, int breadth)
{
cout << "Area = " << length * breadth << endl;
}
};

int main()
{
Rectangle rect(4,5); 
Rectangle rect2(5,8); // 修改变量名避免重名
system ("pause");
return 0;
}
  • 方案2:如果不需要同时保留两个对象,可以通过花括号限定第一个对象的生命周期,让它在第二个对象定义前自动销毁
int main()
{
    {
        Rectangle rect(4,5); 
    } // 第一个rect在此处离开作用域,自动销毁
    Rectangle rect(5,8); 
    system ("pause");
    return 0;
}
  • 方案3:如果需要复用同一个变量名更新对象参数,可以给Rectangle类补充默认构造函数和参数设置成员函数,先创建对象再修改参数
class Rectangle
{
private:
    int length;
    int breadth;
public:
    // 补充默认构造函数
    Rectangle() = default;
    Rectangle(int l, int b):length(l),breadth(b)
    {
        cout << "Area = " << length * breadth << endl;
    }
    // 补充参数设置成员函数
    void setParam(int l, int b){
        length = l;
        breadth = b;
        cout << "Area = " << length * breadth << endl;
    }
};

int main()
{
    Rectangle rect(4,5); 
    rect.setParam(5,8); // 复用现有对象更新参数,不需要重复定义
    system ("pause");
    return 0;
}

内容的提问来源于stack exchange,提问作者Vikram Mehta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 11:24:03