我有三个文件:Stack.cc,Stack.h和stacktest.cc。我不确定哪些文件包含在哪里,因此我会得到不同的错误。目前,Stack.h的代码是:
#ifndef STACK_H
#define STACK_H
#include<iostream>
using namespace std;
template<typename T>
class Stack
{
public:
Stack();
void push(int);
void pop();
int top();
int size();
bool empty();
private:
class Element
{
public:
int data;
Element *next;
Element(Element *n, T d) : next{n}, data{d} {}
};
Element *first;
int num;
};
#endif
#include"Stack.cc"
来自Stack.cc的(相关的,我认为)代码是:
#include<iostream>
using namespace std;
template<typename T>
Stack<T>::Stack()
{
first=nullptr;
}
template<typename T>
void Stack<T>::push(int)
{
num++;
first = new Element(first, data);
}
Stacktest目前只是一个试图调用默认构造函数的测试文件。我目前得到的错误是:
In file included from Stack.h:30:0,
from stacktest.cc:2:
Stack.cc: In member function ‘void Stack<T>::push(int)’:
Stack.cc:22:28: error: ‘data’ was not declared in this scope
first = new Element(first, data);
^
Stack.cc: In function ‘int size()’:
Stack.cc:62:11: error: ‘num’ was not declared in this scope
return num;
出于某种原因,它不会让我访问私人数据成员。之前我没有.h文件中的include,而是在Stack.cc中包含了.h,这很有用,虽然不能让我从Stacktest.cc访问堆栈类(Stacktest.cc只包含Stack.h)
非常感谢任何帮助,谢谢。