无法从.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.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()
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 将包含C样式数组的对象初始化为成员变量(C++)
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 在循环中按顺序遍历成员变量
- c++类声明时,相同的例程,不同的成员变量类型
- 如何从另一个文件继承私有成员变量和公共函数
- 在C++类中,是否必须初始化作为数组的成员变量
- 如何从子成员函数修改父公共成员变量
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 从私有成员变量的成员方法返回unique_ptr
- 在派生类中使用基类的私有成员变量的最佳方法
- 静态 constexpr 类成员变量对多线程读取是否安全?
- C++:是否可以使用非静态成员变量模板?
- 打印所有继承的类成员变量和方法
- 如何在复杂继承中访问静态成员变量
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 成员变量与函数概念检查