2017-02-11 10 views
-1

メインの外から恥骨のメンバー関数にアクセスするにはどうすればよいですか?私が「ドット演算子」を使って関数を直接呼び出すと、「スコープエラー」が表示されます。オブジェクト名がそのスコープの下で宣言されていないことを示します。ここに私のコードのスニペットがあります。外部関数(ないメンバ関数)内部C++でmain関数の外にあるオブジェクトを使用するにはどうすればよいですか?

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(); 

ように私は、関数呼び出しを行いました。そしてはい、私はニュービーです!私はそれが私のコードからそれ自身のために示すと思います。前もって感謝します!

EDIT-あなたが求めている部分が不明です。だからここにある。私の全体のコード:

#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; 
} 
+0

http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

+0

完全な例を投稿してください。あなたのメインと他の機能を表示します。私たちはコードをコンパイルして、まったく同じエラーを得ることができるはずです。 –

+0

ほとんどの場合、メインから別の関数にパラメータを渡す必要があります。 –

答えて

0

あなたadd関数はメンバ関数であるとして、あなたは

void add() 
{ 
    cout<<qt();  
} 
+0

したがって、引数としてオブジェクトを渡す必要がありますか? – Kathir

+0

あなたもそれを行うことができますし、非メンバ関数内にオブジェクトを作成することもできます – Yousaf

+0

詳細を教えてください。おそらく例を挙げてください。私はあなたを得ていませんでした。私は学習者です。 – Kathir

0

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

変更、それを持っているように、それからqt()を呼び出す必要はありませんスコープエラーは、宣言が間違った場所にあることを意味します。オブジェクトを宣言した場所を確認してください。

+0

間違いはないようです。私はコード全体をアップロードしました。再確認してください – Kathir

0

変数lは、関数mainでのみ宣言されているため、mainの範囲外では「可視」ではありません。

あなたの声明cout<<l[2].qt()は、クラスlaptopのメンバ関数addの一部であり、従って、mainの範囲外:

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

おそらく意味:

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

私はスコープ解決演算子を使用できますか、多分この関数内でスコープの可視性を与えることはできますか? – Kathir

+0

スコープ解決演算子 '::'はスコープの曖昧さを解決するためのものですが、スコープ外であれば変数を「可視」にすることはできません。 'll'をグローバル変数にして、それをメンバ関数' add'のスコープに入れる必要があります。 –

+0

さて、答えに行くよ。 2つの方法があります。1)メンバー関数にします。2)オブジェクトを外部関数に渡します。私は正しいですか? – Kathir

関連する問題