簡體   English   中英

指針數組C ++

[英]pointer array C++

我想創建一個指針數組,該指針數組包含該類中對象的地址,因此當我調用掃描程序功能時,它將讀取pcode並搜索具有相同pcode的對象。 我聲明數組錯誤嗎? 還是我誤解了靜態概念? 或者是其他東西 ?

無論如何,我想必須發布整個代碼

#include <string>
using namespace std;
class product{
    public:
        product();
        product(long&,string&);
        void setCode();
        void getCode(long);
        void static scanner();
        void const printer();
        static product *point[3];
        static int a;
    private:
        string pname;
        long pcode;

};/*
class PrepackedFood:public product{
    public:
        PrepackedFood(long&, string&,double);
    private:
        double uPrice;
};
class FreshFood:public product{
    public:
        FreshFood(long&,string&,double,double);
    private:
        double weight;
        double pricepk;

};*/


#include "product.h"
#include <iostream>
product::product(){pcode=0;pname="unknown";
point[a]= this;
a++;}
product::product(long& c,string&n){pcode=c;pname=n;
}
//void const product::printer(){cout<<getCode()}
void product::setCode(){ cout<<"enter product name\n  ";cin>>pname;
cout<<"enter product code _____\b\b\b\b\b";cout<<"\a";
cin>>pcode;cout<<endl;
cout<<pname<<endl;
cout<<pcode<<endl;
}

void product::getCode(long s){
    if ((*this).pcode=s){
    printer();
    }
}
void product::scanner(){
    long a;
    cout<<"SCANNING!\a_____\b\b\b\b\b";cin>>a;
    int i=0;
    while(i<3){
        if (point[i]->pcode==a){point[i]->printer();
        break;
        }
        i++;    
        //(i==3)?cout<<"try again\n":"\a";
        }
}
void const product::printer(){
    cout<<pname<<endl;
    cout<<pcode<<endl;

}



#include "product.h"
int main(){
    product a[3];
    int i=0;
    while(i<3){
    a[i].setCode();
    i++;
    }

    product::scanner();

    return 0;
}

我知道它可以更輕松地完成,我只是在學習,所以只想修復掃描儀功能。 它不編譯

1> product.obj:錯誤LNK2001:未解決的外部符號“ public:靜態類產品* * product :: point”(?point @ product @@ 2PAPAV1 @ A)1> product.obj:錯誤LNK2001:未解決的外部符號“ public :static int產品:: a“(?a @ product @@ 2HA)

代碼看起來一團糟。

解決鏈接器問題的方法是定義已經聲明的靜態point成員:

product* product::point[3];

是不編譯,還是編譯並崩潰? 發布時,請務必准確說明問題所在。 我可以很容易地在其中看到一些運行時問題。

在循環中,您始終會觸摸點[0],點[1]和點[2]的指針。 但是,您永遠不要將它們初始化為null或執行null檢查。 因此,如果在調用掃描程序之前沒有調用過構造函數3次,則將出現段錯誤,因為這些指針中的一個或多個將無效。

另外,構造函數從不檢查是否有溢出,因此,如果您多次調用構造函數3次,則會出現段錯誤。 而且,如果您要直接從函數來回傳遞對象,請記住,編譯器可能會插入臨時對象構造函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM