Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 访问私有数据成员c++;_C++ - Fatal编程技术网

C++ 访问私有数据成员c++;

C++ 访问私有数据成员c++;,c++,C++,我有三个文件: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); voi

我有三个文件: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"
#ifndef堆栈
#定义堆栈
#包括
使用名称空间std;
模板
类堆栈
{
公众:
堆栈();
无效推力(int);
void pop();
int-top();
int size();
bool empty();
私人:
类元素
{
公众:
int数据;
元素*下一个;
元素(元素*n,td):下一个{n},数据{d}
};
元素*第一;
int-num;
};
#恩迪夫
#包括“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);
}
#包括
使用名称空间std;
模板
Stack::Stack()
{
第一个=空PTR;
}
模板
void Stack::push(int)
{
num++;
第一个=新元素(第一个,数据);
}
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;
在Stack.h:30:0中包含的文件中,
来自stacktest.cc:2:
Stack.cc:在成员函数“void Stack::push(int)”中:
Stack.cc:22:28:错误:未在此作用域中声明“data”
第一个=新元素(第一个,数据);
^
Stack.cc:在函数“int size()”中:
Stack.cc:62:11:错误:“num”未在此作用域中声明
返回num;
出于某种原因,它不允许我访问私有数据成员。在此之前,我没有将include包含在.h文件中,而是将.h包含在Stack.cc中,虽然我不允许从Stacktest.cc访问Stack类(Stacktest.cc仅包含Stack.h),但这样做还是有效的


非常感谢您的帮助。

您是指
push(int-data)
而不是
push(int)
?另外,我猜您在Stack.cc中编写了
int-size(){
,而您的意思是
int-Stack::size(){
通常,您在.cc文件中包含了-.h文件,而不是其他方式(在您的示例中,您在.h中包含了.cc文件)。在stacktest.cc中,您将包括stack.h文件此代码有许多错误,但主要是太复杂了。您看到的错误与模板或
#include
指令无关,这意味着您可以将其简化为一个更简单的示例—在编写这么多之前,您应该注意到这些错误代码。如果你简化,你会看到错误消息的意思就是它们所说的;你试图在它们的范围之外使用两个变量(即它们不存在的地方)。你可以从你的头中删除使用名称空间std开始。你是指
push(int-data)
而不是
push(int)
?我猜你也写了
int-size(){
在Stack.cc中当您指的是
intstack::size(){
通常,您在.cc文件中包含-.h文件,而不是以其他方式(在您的示例中,您在.h中包含.cc文件)。在stacktest.cc中,您将包括stack.h文件此代码有许多错误,但主要是太复杂了。您看到的错误与模板或
#include
指令无关,这意味着您可以将其简化为一个更简单的示例—在编写这么多之前,您应该注意到这些错误代码。如果您简化,您将看到错误消息的含义与它们所说的完全相同;您正试图在其范围之外使用两个变量(即它们不存在的地方)。您可以从标头中删除using namespace std开始。