2014-11-04 36 views
-2

構造函數在這裏:我在C++中有一個變量,表示它的未定義,當在我的構造函數中明確定義時。 C++

當我聲明我的setLeft()函數時,它告訴我m_pLeft未定義。我試過把它移動到所有的地方,不能說它只是未定義的東西。

SetLeft被定義爲 void setLeft(BookRecord * leftpointer){0} {0} {0} }

#pragma once 
class BookRecord 
    { 
    private: 
     char m_sName[100]; //unique names for each book 
     long m_lStockNum; //a stock number, similar to a barcode 
     int m_iClassification; //how a book should be classified, similar to a dewey decimal system 
     double m_dCost; //The price of the book 
     int m_iCount; //How many books are in stock 
     BookRecord *m_pLeft; //Left pointer for the tree 
     BookRecord *m_pRight; //right Pointer from the tree 

    public: 
     BookRecord(void); 
     BookRecord(char *name,long sn, int cl,double cost); 
     ~BookRecord(); 
     void getName(char *name); 
     void setName(char *Sname); 
     long getStockNum(); 
     void setStockNum(long sn); 
     void getClassification(int& cl); 
     void setClassification(int cl); 
     double getCost(); 
     void setCost(double c); 
     int getNumberInStock(); 
     void setNumberInStock(int count); 
     void printRecord(); 
     BookRecord getLeft(); 
     BookRecord getRight(); 
     void setLeft(BookRecord *leftpointer); 
     void setRight(BookRecord *rightpointer); 
    }; 
+2

需要使用'BookRecord *',因爲它是一個指針 – vsoftco 2014-11-04 22:23:45

+0

這只是持有的書籍單個對象的類。存儲記錄的實際實現被保存在不同的類中。他們有星號,只是因爲某種原因沒有複製。 – 2014-11-04 22:24:40

+3

你明確地說''setLeft'中報告了一個錯誤。那麼你不會向我們展示'setLeft'的主體/實現。爲什麼?? – abelenky 2014-11-04 22:27:01

回答

3

當我宣佈我setLeft()功能,它告訴我m_pLeft沒有定義。

您看到的錯誤不是從setLeft()成員函數的聲明來,但從其定義(聲明沒有引用m_pLeft):

// This is incorrect - it will not compile 
void setLeft(BookRecord *leftpointer) { 
    m_pLeft = leftpointer; 
} 

有問題像這樣的定義是編譯器把它看作一個獨立函數,所以m_pLeft成員不在範圍內。你需要告訴你要定義一個成員函數,這樣編譯器:

// This will compile 
void BookRecord::setLeft(BookRecord *leftpointer) { 
    m_pLeft = leftpointer; 
} 
相關問題