名称后跟“::”必须是 class 或命名空间错误,即使“::”跟在 class 名称之后
Name followed by '::' must be class or namespace error even though the '::' is following a class name
我正在尝试用 C++ 实现优先级队列。我创建了一个名为 'priority_queue.h' 的头文件,其中包含我的 class 的定义,以及一个定义通用类型的模板。我还有一个文件,在该文件中,我在名为 'priority_queue.cpp' 的文件中实现 class 定义中定义的方法,其中包含 'priority_queue.h'。我的文本编辑器和编译器都在抛出错误,尽管它们似乎有所不同。
我在 Whosebug 和其他网站上查找了其他问题,我什至直接从在线答案中复制粘贴了一些代码,这些代码应该是正确的,但即使这些代码也不起作用。
这是我的 'priority_queue.h' 头文件中的代码
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
template <typename T>
class pqueue{
public:
pqueue();
void insert(T element, int priority);
private:
vector<T> elements(); //This vector will store our data in the correct order
};
这是我的 'priority_queue.cpp' 文件中的代码
#include <iostream>
#include <iterator>
#include <vector>
#include "priority_queue.h"
using namespace std;
template <typename T>
void pqueue::insert(T element, int priority){
}
编译器抛出错误并显示 'template<class T> class pqueue' used without template parameters
。
我的文本编辑器给我一个错误 name followed by '::' must be a class or namespace name
我使用的是配备 i7 8550U、16GB RAM 和 256GB SSD 的 Dell XPS 13 9370 运行 Windows 10 Home Version 1903,我的文本编辑器是 Microsoft Visual Studio代码内幕。
您必须在header中定义class模板的成员函数。并写
template <typename T>
void pqueue<T>::insert(T element, int priority){
}
您可以在 priority_queue.cpp
中像这样定义模板 class 的构造函数和插入成员函数
template <typename T>
pqueue<T>::pqueue(){}
template <typename T>
void pqueue<T>::insert(T element, int priority){}
防止链接错误,例如
undefined reference to `pqueue<int>::insert(int, int)'
有两种选择
将模板函数的定义物理移动到 priority_queue.h 文件中,(即使它不是内联函数)正如来自莫斯科的@Vlad
或在 priority_queue.cpp
末尾包含以下行 template class pqueue<int>;
引用https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl
我正在尝试用 C++ 实现优先级队列。我创建了一个名为 'priority_queue.h' 的头文件,其中包含我的 class 的定义,以及一个定义通用类型的模板。我还有一个文件,在该文件中,我在名为 'priority_queue.cpp' 的文件中实现 class 定义中定义的方法,其中包含 'priority_queue.h'。我的文本编辑器和编译器都在抛出错误,尽管它们似乎有所不同。
我在 Whosebug 和其他网站上查找了其他问题,我什至直接从在线答案中复制粘贴了一些代码,这些代码应该是正确的,但即使这些代码也不起作用。
这是我的 'priority_queue.h' 头文件中的代码
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
template <typename T>
class pqueue{
public:
pqueue();
void insert(T element, int priority);
private:
vector<T> elements(); //This vector will store our data in the correct order
};
这是我的 'priority_queue.cpp' 文件中的代码
#include <iostream>
#include <iterator>
#include <vector>
#include "priority_queue.h"
using namespace std;
template <typename T>
void pqueue::insert(T element, int priority){
}
编译器抛出错误并显示 'template<class T> class pqueue' used without template parameters
。
我的文本编辑器给我一个错误 name followed by '::' must be a class or namespace name
我使用的是配备 i7 8550U、16GB RAM 和 256GB SSD 的 Dell XPS 13 9370 运行 Windows 10 Home Version 1903,我的文本编辑器是 Microsoft Visual Studio代码内幕。
您必须在header中定义class模板的成员函数。并写
template <typename T>
void pqueue<T>::insert(T element, int priority){
}
您可以在 priority_queue.cpp
中像这样定义模板 class 的构造函数和插入成员函数template <typename T>
pqueue<T>::pqueue(){}
template <typename T>
void pqueue<T>::insert(T element, int priority){}
防止链接错误,例如
undefined reference to `pqueue<int>::insert(int, int)'
有两种选择
将模板函数的定义物理移动到 priority_queue.h 文件中,(即使它不是内联函数)正如来自莫斯科的@Vlad
或在 priority_queue.cpp
末尾包含以下行
template class pqueue<int>;
引用https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl