【发布时间】:2021-06-05 21:13:02
【问题描述】:
我正在尝试一个家庭作业项目,该项目需要我创建一个模板堆栈类,并且我必须将该类继承到另一个类中。整个项目工作正常,包括堆栈类。但是,一旦我包含了继承堆栈类的文件,编译器就找不到任何堆栈的函数定义,并且它说堆栈类模板已经被定义。 这是堆栈类结构:
#include<stdlib.h>
#include<iostream>
template <class T>
class Stack
{
public:
Stack();
~Stack();
T data;
Stack* link;
Stack* top;
void push(T);
bool isEmpty();
T peek();
void pop();
void display();
};
template <class T>
Stack<T>::Stack()
{
}
template <class T>
Stack<T>::~Stack()
{
}
为了便于阅读,我不会在此处包含所有功能。
这是继承了我的堆栈和文件阅读器的类。
#pragma once
#include"infile.h"
#include"Node.h"
class Test: public infile, public Stack<char>
{
public:
Test();
~Test();
void output(char);
void scan();
private:
infile sequence;
std::string s = "AACTAAT";
int index;
std::ofstream outfile;
bool isString(int);
};
Test::Test()
{
outfile.open("output.txt");//will just add to what is already in the file
}
Test::~Test()
{
outfile.close();
}
void Test::scan() {
Stack<char> mystack;
//infile sequence;
sequence.getfile();
for (size_t i = 0; i < genome.length(); i++)
{
if (isString(i)) {
std::cout << "Sequence found at " << i << " ";
}
}
}
bool Test::isString(int n) {
if (s[0] == sequence.returnchar(n) && s[1] == sequence.returnchar(n + 1) && s[2] == sequence.returnchar(n + 2) && s[3] == sequence.returnchar(n + 3) && s[4] == sequence.returnchar(n + 4) && s[5] == sequence.returnchar(n + 5) && s[6] == sequence.returnchar(n + 6)) {
return true;
}
else
return false;
}
对于上下文,目标是使用一个类从文件中读取,并使用我创建的模板堆栈在文件中查找子字符串。就像我上面写的那样,在我包含我的 Test 类之前,该项目运行良好。
编辑:以前的错误已通过移动到三个文件系统得到修复,但现在出现了一个新错误。
template <class T>
class Stack
{
public:
Stack();
~Stack();
T data; // C2079 Stack<T>::data' uses undefined class 'T'
Stack* link;
Stack* top;
void push(T);
bool isEmpty();
T peek();
void pop();
void display();
};
代码有效,我继承的是 Stack 而不是 Stack
【问题讨论】:
-
请显示您的编译命令,以及您收到的确切错误消息。
-
从你的头文件中取出所有
#include's 并将它们放入你的.cpp 文件中。我敢打赌它会编译。 -
@cigien 我刚刚在 Visual Studio 中点击了本地 Windows 调试器
-
@lakeweb 但是我的课程中不需要这些库来执行这些过程吗?我在这些头文件中也有我的实现。
-
如果您将必要的包含放在 cpp 中的 you 标头前面,它们就会在那里。而带有
class Test...的第二组代码看起来像一个标题。如果没有定义的inline关键字,您将收到重复错误。不把包含在标题中总是可以的,我想不出一个例外。
标签: c++ templates inheritance