我正在编写自己的Tree数据结构。 在我的parent()函数中,我想抛出我创建的no_parent异常。所有函数都在Tree.cpp文件中实现。
Tree.hpp
List<WebElement> homeEvents = body.findElements(By.className(".summary-vertical.fl"));
但是当我以这种方式在Tree.cpp文件中实现no_parent时
#ifndef Tree_hpp
#define Tree_hpp
#include <stdio.h>
#include <vector>
using namespace std;
template<typename T>
class Tree{
class Node;
class no_parent : public std::exception {
virtual const char* what() const _NOEXCEPT
{
return "no_parent";
}
};
protected:
Node* rootNode;
Node* currentNode;
int _size;
public:
Tree();
void addChild(T* childElem);
void removeChild(int index) throw (out_of_range);
bool empty();
int size();
Tree& root();
bool isRoot();
bool isExternal();
Tree& parent() throw(no_parent);
Tree& child(int index) throw(out_of_range);
int getChildrenNum();
int getChildrenNum(Node* node);
};
#endif /* Tree_hpp */
我从parent()函数获取错误消息“在异常规范中不允许使用不完整类型'Tree :: no_parent'”。 如何在Tree.hpp文件外实现no_parent?
答案 0 :(得分:0)
您无法根据源文件中的模板参数实现方法,该文件从不包含在需要该类实例的位置。您要么必须包含源文件,要么立即在标题中实现您的方法。有关详细信息,请参阅this question。
答案 1 :(得分:0)
我希望您的企业需要您在类Tree中拥有嵌套类和前向声明。我不在乎他们。
但是你的代码可以正常运行&#34; noexcept&#34;来自C ++ 11的关键字。 http://en.cppreference.com/w/cpp/language/noexcept
我想&#34; _NOEXCEPT&#34;不再存在了。可能在非常具体的编译器中保持向后兼容性。
我对您的代码进行了一些更改并进行了测试,运行正常。请在下面找到详细信息。
删除&#34; stdio&#34;并替换了&#34; iostream&#34;,仅处理C ++(至少问题标签说)
注释了一些缺少变量声明的函数。
这是代码。试试吧。
#include <iostream>
using namespace std;
template<typename T>
class Tree{
class Node;
class no_parent : public std::exception {
//Added "noexcept" key word here.
virtual const char* what() const noexcept
{
return "no_parent";
}
};
protected:
Node* rootNode;
Node* currentNode;
int _size;
public:
Tree();
void addChild(T* childElem);
// void removeChild(int index) throw (out_of_range);
bool empty();
int size();
Tree& root();
bool isRoot();
bool isExternal();
Tree& parent() throw(no_parent);
//Tree& child(int index) throw(out_of_range);
int getChildrenNum();
int getChildrenNum(Node* node);
};
int main()
{
return 0;
}