【问题标题】:How to use an object outside the main function in C++?如何在 C++ 中使用 main 函数之外的对象?
【发布时间】:2017-02-11 20:12:26
【问题描述】:

如何从 main 外部访问公共成员函数?当我使用“点运算符”直接调用该函数时,它会显示“范围错误”。它表示对象名称未在该范围内声明。这是我的代码的 sn-ps。

class laptop
{
private:
        int id,price,cpu,gpu,ram,size,qty;
        char name[30];
    public: 
        laptop() : id(0),price(0),cpu(0),gpu(0),ram(0),size(0) {}
        void add(int i,char n[],int p,int c,int r,int g,int s,int q)
        {
            id=i; std::strcpy(name,n); price=p; cpu=c; ram=r; gpu=g; size=s; qty=q;
        }
int qt()
        {
            return qty;
        }
};

在外部函数(不是成员函数)内部,我将函数调用作为

cout<<l[1].qt();

它只是不断弹出该错误。是的,我是新手!我想它会从我的代码中显示出来。提前致谢!

编辑-不确定您要的是哪一部分。所以就在这里。我的整个代码:

#include <iostream>
#include <cstring>
#include <iomanip>
//#include <string>
using namespace std;
char name[30],ip3;
int ip1,ip2,i,cart[10][2],temp,id;
static int count=0;

int get_id();

class laptop
{
    private:
        int id,price,cpu,gpu,ram,size,qty;
        char name[30];
    public: 
        laptop() : id(0),price(0),cpu(0),gpu(0),ram(0),size(0) {}
        void add(int i,char n[],int p,int c,int r,int g,int s,int q)
        {
            id=i; std::strcpy(name,n); price=p; cpu=c; ram=r; gpu=g; size=s; qty=q;
        }
        void disp()
        {
            cout<<name<<endl<<"Processor-Intel Core i"<<cpu<<" ,RAM-"<<ram<<" GB, "<<gpu<<" GB Graphics, "<<size<<" inches HD display"<<endl;
            cout<<"Price Rs."<<price<<endl;
        }
        void tab()
        {
            cout<<setw(1)<<id<<setw(22)<<name<<setw(17)<<"Intel Core i"<<cpu<<setw(7)<<ram<<" GB"<<setw(6)<<gpu<<" GB"<<setw(10)<<size<<" inches";
        }
        int qt()
        {
            return qty;
        }
        void add()
        {
            cout<<l[2].qt();
        }

};
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main() 
{
    laptop l[15];
    l[1].add(1001,"HP Pavillion 530",30000,5,4,1,15,10);
    l[2].add(1002,"HP Pavillion 540",32000,5,6,1,15,11);
    l[3].add(1003,"HP Pavillion 730",37000,7,8,2,15,4);
    l[4].add(1004,"HP Pavillion 750",44000,7,16,2,17,10);
    l[5].add(1005,"HP Pavillion 750+",49000,7,32,4,17,14);
    l[6].add(1006,"Dell Vostro DV300",23000,3,4,1,13,2);
    l[7].add(1007,"Dell Vostro DV301",25000,3,4,1,14,9);
    l[8].add(1008,"Dell Vostro DV510",29000,5,4,1,15,18);
    l[9].add(1009,"Dell Vostro DV710",44000,7,8,2,15,4);
    l[10].add(1010,"Dell Vostro DV750",48000,7,16,2,17,3);
    l[11].add(1011,"Lenovo Y300",27000,3,8,1,13,9);
    l[12].add(1012,"Lenovo Y900",60000,7,16,4,17,2);
    cout<<"Welcome to Walmart- The online electronic supermarket"<<endl;
    cout<<"Walmart is a one-stop destination for all your digital needs"<<endl;
    cout<<"Please enter your name"<<endl;
    cin>>name;
    cout<<"Welcome "<<name<<" to our brand new e-store";
    cout<<endl<<"We have laptops,tablets and desktops available in our store currently"<<endl;
    cout<<"To go to the laptop store, press 1"<<endl<<"To go to the tablet store, press 2"<<endl<<"To go to the desktop store, press 3";
    cin>>ip1;
    switch(ip1)
    {
    case 1:
        cout<<"Press 1 for a tabulated view. Else press 2 for individual view";
        cin>>ip2;
        switch(ip2)
        {
        case 1:
            cout<<"Sl. no."<<setw(7)<<" Model Name"<<setw(20)<<"Processor"<<setw(13)<<"RAM"<<setw(14)<<"Graphics"<<setw(15)<<"Screen Size"<<endl;
            for(i=1;i<13;i++)
            {
                l[i].tab();
                cout<<endl;
            }
            break;
        case 2:
            cout<<endl<<"Here's a list of all the models available with us"<<endl;
            for(i=1;i<13;i++)
            {
            cout<<i<<") ";
            l[i].disp();
            cout<<endl;
            }
            break;
        }
        cout<<"Are you interested in any of the above listed models? (Y/N)"<<endl;
        cin>>ip3;
        if(ip3=='N')
        {
            cout<<"Sorry!Please re visit the store soon for new models.Coming soon!";
            break;
        }
        id=get_id();
        cout<<"Please enter the quantity ("<<l[id].qt()<<" available in stock)"<<endl;
        cin>>cart[count][1];
        if(cart[count][1]<=l[id].qt())
        cout<<"Item added to cart";
        else
        cout<<"Error. Please recheck the quantity";
    }

    return 0;
}

int get_id()
{
    cout<<"Please enter the item id of the model that you are interested in"<<endl;
    cin>>cart[count][0];
    temp=(cart[count][0])/1000;
    if(temp==1)
    return (cart[count][0])-1000;
    else if(temp==2)
    return (cart[count][0])-2000;
}

【问题讨论】:

  • 请发布一个完整的例子。显示您的主要功能和其他功能。我们应该能够编译代码并得到完全相同的错误。
  • 很可能,您需要将参数从 main 传递给另一个函数。
  • 你的 laptop::add 函数没有意义。它没有添加任何东西!它是在 laptop 对象的特定实例上调用的方法,但您以某种方式希望它知道位于程序其他位置的 laptop 实例数组?为什么? (您可以将数组作为参数传递给函数,但我从设计的角度对此提出质疑。)

标签: c++ function class object member


【解决方案1】:

范围错误意味着您的声明位于错误的位置。检查您声明对象的位置。

【讨论】:

  • 好像没有错。我已经上传了整个代码。重新检查
【解决方案2】:

变量l 仅在函数main 中声明,因此它在main 范围之外是不“可见的”。

您的声明cout&lt;&lt;l[2].qt()laptop 类的成员函数add 的一部分,因此不在main 的范围内:

    void add()
    {
        cout<<l[2].qt();
    }

你的意思可能是:

    void add()
    {
        cout << this->qt();
    }

【讨论】:

  • 我可以使用作用域解析运算符并在这个函数中也可以提供作用域可见性吗?
  • 没有。范围解析运算符:: 用于解决范围模糊性,但如果变量超出范围,它不能使变量“可见”。您需要将 l 设为全局变量,以将其纳入成员函数 add 的范围内。
  • 好的,然后按照答案进行。我现在可以通过 2 种方法进行 1) 使其成为成员函数 2) 将对象传递给外部函数。我说的对吗?
猜你喜欢
  • 1970-01-01
  • 2021-05-17
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 2012-06-25
  • 2020-07-09
  • 1970-01-01
相关资源
最近更新 更多