簡體   English   中英

無法從.cpp訪問.h文件中的私有成員變量

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

我是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'中沒有名為'Vertex'的類型

很清楚。 您嘗試用作函數返回值的類型不在名為“Edge”的命名空間或類中。
另一方面,為了在單獨的代碼文件中而不是在類聲明中定義類Edge的方法,您需要從類名開始。 這也將修復第二個錯誤,因為如果你為類(而不是stanadalone函數)創建一個方法實現,它將能夠訪問私有屬性。

所以改變這個

Edge::Vertex getVertex1()

Vertex Edge::getVertex1()

你的聲明是關閉的:它應該是<return type> <class>::<memberfuction>

Edge::Vertex getVertex1()應該是Vertex Edge::getVertex1()

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

Edge::Vertex getVertex1()

至:

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

你也錯過了Vertex的空構造函數實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM