无法从.cpp访问 .h 文件中的私有成员变量

Can not access private member variable in .h file from .cpp

本文关键字:成员 变量 文件 cpp 访问      更新时间:2023-10-16

我是C++新手,不确定为什么我无法访问返回类型从 .h 文件中定义的.cpp。当我将 Edge::Vertex getVertex1(( 更改为 Vertex getVertex1(( 时,我只收到错误
错误:使用未声明的标识符"Vertex1"(与边类中的顶点 2 相同(有人可以解释为什么这种方法不好吗?

// Graph.cpp -- Graph contains main function.
#include <iostream>
#include <list>
#include <string>
#include "Vertex.h"
#include "Edge.h"
#define EDGE_DISTANCE 1 
using namespace std;
class Graph
{        
};
int main()
{
   Vertex v1(0);
   Vertex v2(1);
   Edge edge(v1, v2);
   // cout << edge.getVertex1() << endl;
   // cout << edge.getVertex2() << endl;
   return 0;
}
--------------------------------------------------------------
// Edge.h
#ifndef EDGE_H
#define EDGE_H
#include "Vertex.h"
using namespace std;
class Edge
{
    private:
        Vertex vertex1;
        Vertex vertex2;
        int weight;
    public:
       Edge(Vertex,Vertex);
       Vertex getVertex1();
       Vertex getVertex2();
};
#endif
--------------------------------------------------------------
// Edge.cpp
#include "Edge.h"
Edge::Edge(Vertex _vertex1, Vertex _vertex2)
{
   vertex1 = _vertex1;
   vertex2 = _vertex2;
   weight  = 1;
}
Edge::Vertex getVertex1() // error: no type named 'Vertex' in 'Edge'
{
   return vertex1;        // error: use of undeclared identifier 'vertex1'    
}
Edge::Vertex getVertex2()
{
  return vertex2;
}
--------------------------------------------------------------
// Vertex.h
#ifndef VERTEX_H
#define VERTEX_H
#include <list>
using namespace std;
class Vertex
{
  private:
      long id;
  public:
      list<Vertex> adjacentVertexes;
      Vertex();
      Vertex(long);
};
#endif
--------------------------------------------------------------
// Vertex.cpp
#include "Vertex.h"
Vertex::Vertex(long _id)
{
   id = _id;
}

在 Edge.cpp 中,更改以下内容:

Edge::Vertex getVertex1()

自:

Vertex Edge::getVertex1()
Vertex Edge::getVertex2()

此外,您还缺少顶点的空构造函数实现。

错误

错误:"边缘"中没有名为"顶点"的类型

很清楚。您尝试用作函数返回值的类型不在名为"Edge"的命名空间或类中。
另一方面,为了在单独的代码文件中而不是在类声明中定义类 Edge 的方法,您需要从类名开始。这也将修复第二个错误,因为如果您为类(而不是 stanadalone 函数(进行方法实现,它将能够访问 private 属性。

所以改变这个

Edge::Vertex getVertex1()

Vertex Edge::getVertex1()

您的声明已关闭:应该<return type> <class>::<memberfuction>

Edge::Vertex getVertex1()应该Vertex Edge::getVertex1()