在 header class 中创建内联函数到私有变量
Creating inline function in header class to a private variable
我要做一个链表。我不确定我是否首先做对了。但基本上项目说我不允许制作 .cpp 文件,但我必须通过 .h 文件创建 4 个内联语句。
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; }
};
你已经完成了一半。您需要像您所做的那样在 header 文件中声明函数。
缺少的步骤是您不需要在 class body 中定义函数,而是使用 class 名称在 class 声明下方定义它们范围解析运算符和内联运算符。
您遗漏的另一部分是您在 Queue class 中声明可能用于 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;
}
不清楚您打算为哪些节点设置这些值,因此我将根据一些假设来填充函数。
不管怎样,我想你明白了。如果要在 header class 中定义内联函数,则不能在 class 本身中定义 body。您必须将其声明为内联,这是 编译器建议 ,在 class 的 body 之外。我知道我没有完整定义链表的功能,我会把它留给你。但是,这应该可以回答内联问题。
我要做一个链表。我不确定我是否首先做对了。但基本上项目说我不允许制作 .cpp 文件,但我必须通过 .h 文件创建 4 个内联语句。
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; }
};
你已经完成了一半。您需要像您所做的那样在 header 文件中声明函数。
缺少的步骤是您不需要在 class body 中定义函数,而是使用 class 名称在 class 声明下方定义它们范围解析运算符和内联运算符。
您遗漏的另一部分是您在 Queue class 中声明可能用于 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;
}
不清楚您打算为哪些节点设置这些值,因此我将根据一些假设来填充函数。
不管怎样,我想你明白了。如果要在 header class 中定义内联函数,则不能在 class 本身中定义 body。您必须将其声明为内联,这是 编译器建议 ,在 class 的 body 之外。我知道我没有完整定义链表的功能,我会把它留给你。但是,这应该可以回答内联问题。