关于.cpp与.h头文件中无法关联,unknown override specifier
原因: 未将两个文件放在同一个项目中,且头文件名必须跟方法名保持一致
头文件使用 STL 库函数时,需要声明std命名空间
正确做法:
Header.h头文件
Header.cpp文件
代码呈上:
#ifndef HEADER_H_
#define HEADER_H_
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode();
TreeNode(int x);
TreeNode(int x, TreeNode* left, TreeNode* right);
};
struct ListNode {
int val;
ListNode* next;
ListNode();
ListNode(int x);
ListNode(int x, ListNode* next);
};
class ConstructTree {
public:
// Encodes a tree to a single string.
std::string serialize(TreeNode* root);
// Decodes your encoded data to tree.
TreeNode* deserialize(std::string data);
};
#endif // !HEADER_H_
#include<iostream>
#include<string>
#include<vector>
#include<queue>
#include"Header.h"
using namespace std;
TreeNode::TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode::TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode::TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
ListNode::ListNode() : val(0), next(nullptr) {}
ListNode::ListNode(int x) : val(x), next(nullptr) {}
ListNode::ListNode(int x, ListNode* next) : val(x), next(next) {}
string ConstructTree::serialize(TreeNode* root) {
if (!root) return "null";
string res;
queue<TreeNode* > q;
q.push(root);
TreeNode* node = root;
while (!q.empty()) {
int len = q.size();
for (int i = 0; i < len; ++i) {
node = q.front(); q.pop();
if (node) {
res += std::to_string(node->val);
res += ',';
q.push(node->left);
q.push(node->right);
}
else res += "null,";
}
}
}
TreeNode* ConstructTree::deserialize(string data) {
int left = 0, right = 0, n = data.size();
vector<TreeNode*> v;
string val;
for (; right < data.size(); right++) {
if (data[right] == ',') {
left = right + 1;
continue;
}
else if (data[right] == 'n') {
v.push_back(nullptr);
right = right + 3;
}
else {
int tmp = right + 1;
while (tmp < data.size() && data[tmp] != ',') {
right++;
tmp++;
}
string str = data.substr(left, right - left + 1);
int num = atoi(str.c_str());
v.push_back(new TreeNode(num));
}
}
int pos = 1;
for (int i = 0; i < v.size(); ++i) {
if (!v[i]) continue;
if (pos == v.size()) break;
v[i]->left = v[pos++];
if (pos == v.size()) break;
v[i]->right = v[pos++];
}
return v[0];
}