gpt4 book ai didi

c++ - 模板和函数指针 : How do I define a function-pointer that was declared in a template class?

转载 作者:行者123 更新时间:2023-11-30 05:23:44 25 4
gpt4 key购买 nike

我是 c++ 语言的新手,需要帮助解决以下问题。目前,我正在努力了解"template"和“函数指针”。以下模板类 Queue 在写入单个 .cpp 文件时进行编译:

template <typename T> class Queue
{
public:
Queue()
{
m_add = m_remove = 0;
}
void enque(T *c)
{
m_array[m_add] = c;
m_add = (m_add + 1) % SIZE;
}
T *deque()
{
int temp = m_remove;
m_remove = (m_remove + 1) % SIZE;
return m_array[temp];
}
private:
enum
{
SIZE = 8
};
T *m_array[SIZE];
int m_add, m_remove;
};

但是,当我将此代码分成 .h 和 .cpp 文件时(如下所示),我在 .cpp 文件中定义函数指针时遇到错误;近线:

template<typename T>
T (Queue<T>::*deque)() {

队列.h:

#ifndef QUEUE_H_
#define QUEUE_H_

template<typename T>
class Queue {
enum {
SIZE = 8
};
T *m_array[SIZE];
int m_add, m_remove;
public:
Queue();
virtual ~Queue();
void enque(T *c);
T *deque();
};

#endif /* QUEUE_H_ */

队列.cpp:

#include "Queue.h"

template<typename T>
Queue<T>::Queue() {
m_add = m_remove = 0;
}

template<typename T>
Queue<T>::~Queue() {
}

template<typename T>
void Queue<T>::enque(T *c) {
m_array[m_add] = c;
m_add = (m_add + 1) % SIZE;
}

template<typename T>
T (Queue<T>::*deque)() {
int temp = m_remove;
m_remove = (m_remove + 1) % SIZE;
return m_array[temp];
}

我希望你们中的一位 C++ 专家能帮助我理解如何定义函数指针 < T *deque() > 预先感谢您的帮助。

最佳答案

您的实现与您的声明不符(很明显)。您的函数声明为:

template<class T>
class Queue
{
//... other members

T* deque();
};

在类主体之外,变为:

template<class T>
T* Queue<T>::deque()

也就是说,您需要阅读以下内容:"Why can templates only be implemented in the header file" .它将解释为什么将模板实现从它所属的位置(标题)移动到 cpp 文件很可能是一个错误。

关于c++ - 模板和函数指针 : How do I define a function-pointer that was declared in a template class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39033798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com