2014-11-04 1 views
-2

Конструктор здесь:У меня есть переменная в C++, которая говорит о ее неопределенности, когда она четко определена в моем конструкторе. C++

Когда я объявляю свою setLeft() функцию, он говорит мне m_pLeft не определен. Я пробовал переместить его по всему месту и не могу заставить его сказать, что это что-то другое, кроме неопределенного.

SetLeft определяется как void setLeft (BookRecord * leftpointer) { * m_pLeft = * leftpointer; }

#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

+0

Это просто класс, который содержит отдельные объекты книг. Фактическая реализация хранения записей хранится в другом классе. и у них есть звездочки, они просто не копировались по какой-то причине. –

+3

Вы четко говорите, что в 'setLeft' есть ошибка. Тогда вы не показываете нам тело/реализацию 'setLeft'. Зачем?? – abelenky

ответ

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; 
} 
Смежные вопросы