Создание встроенной функции в классе заголовка для закрытой переменной - PullRequest
0 голосов
/ 07 ноября 2019

Я должен сделать связанный список. Я не уверен, правильно ли я делаю это в первую очередь. Но в основном проект говорит, что мне не разрешено создавать файл .cpp, но я должен создать 4 встроенных оператора через файл .h.

class Queue{
private:
struct QueueNode{
    int size;
    std::string party;
    QueueNode *next;
};
QueueNode *front;
QueueNode *rear;
public:
// Constructor
Queue();

// Destructor
~Queue();

// Queue operations
std::string getPartyName() const { return party; } // This and next 3 lines give error with the private variables
int getSize() const { return size; }
void setPartyName(std::string p) const{ party = p; }
void setSize(int s) const{ size = s; }
};

1 Ответ

1 голос
/ 07 ноября 2019

Вы на полпути. Вы должны объявить функции в заголовочном файле, как вы это сделали.

Недостающий шаг заключается в том, что вам не нужно определять функции в теле класса, а вместо этого определять их ниже объявления класса с использованием имени классас оператором разрешения области действия и встроенным оператором.

Другая часть, которую вам не хватает, - это то, что вы объявляете функции в своем классе очереди, которые, вероятно, предназначены для вашей структуры QueueNode.

class Queue{
private:
struct QueueNode{
    int size;
    std::string party;
    QueueNode *next;
};

   QueueNode *front;
   QueueNode *rear;
   public:
   // Constructor
   Queue();

   // Destructor
   ~Queue();

   // Queue operations
   std::string getPartyName( const QueueNode * const node ) const; 
   int getSize( const QueueNode * const node ) const;
   void setPartyName( QueueNode & out_node, std::string & p);
   void setSize( QueueNode & out_node, int s);
};

inline std::string Queue::getPartyName( const QueueNode * const node ) const 
{
   return node->party;
}

inline int getSize( const QueueNode * const node ) const {
   return node->size;
}

inline void Queue::setPartyName( QueueNode & out_node, std::string & p) {
   out_node.party = p;
}

inline void Queue::setSize( QueueNode & out_node, int s) {
   out_node.size = s;
}

Непонятно, для каких узлов вы собираетесь устанавливать эти значения, поэтому я добавлю функции с некоторыми допущениями.

В любом случае, я думаю, вы поймете точку. Если вы хотите определить встроенные функции в классе заголовка, вы не можете определить тело внутри самого класса. Вы должны объявить его встроенным, что является предложением компилятора , вне тела класса. Я знаю, что не полностью определил функциональность связанного списка, я оставлю это вам. Но это должно ответить на встроенный вопрос.

...