如何通过位于单独类中的引用传递向量
How to pass a vector by reference that located in a separate class
$ make -f makefile.txt
g++ -Wall -W -Werror -pedantic -g -c MinPriority.cpp
MinPriority.cpp: In member function `void MinPriority::createArray()':
MinPriority.cpp:50: error: expected primary-expression before '&' token
MinPriority.cpp:50: error: expected primary-expression before ',' token
MinPriority.cpp:50: error: expected primary-expression before "targetVertex"
makefile.txt:7: recipe for target `MinPriority.o' failed
make: *** [MinPriority.o] Error 1
基本上我正在尝试访问 Graph.h 的功能(位于私有:)WHO 的目的是通过引用传递给定索引处链表的向量。 基本上,它查看链表的向量,转到向量的某个索引并将其链表转换为向量,并通过引用将其传递给另一个文件中的函数。 这是发生错误的地方。
void MinPriority::createArray()
{
Graph::get_adjLine(vector<Edge>&, string targetVertex); //MinPriority.ccp.50: error
}
以下是函数本身get_adjLine()
:
void Graph::get_adjLine(vector<Edge>& v, string targetVertex) //passes back a node and its adjacencies in the form of a vector
{
//vector<Edge> v;
int index;
for(unsigned int i = 0; i != adjList.size(); i++) //find the targetVertex's index
{
if(adjList[i].front().m_vertex == targetVertex)
{
index = i;
continue;
}
}
copy(adjList[index].begin(), adjList[index].end(), v.begin());
}
我目前正在尝试找到任何可能的方法将vector< list<Edge> > adjList;
的私人结构传递到MinPriority::createArray()
。 任何方法对我来说都是最好的,但我花了最后几个小时试图想出一种方法来做到这一点,但我无法弄清楚。 以下是类声明:Graph.h
#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED
//class MinPriority;
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <locale>
using namespace std;
//class MinPriority;
class Graph
{
public:
Graph();
~Graph();
void set_Edge(string targetVertex, string vertex, int weight);
void set_array(string vertex);
void ABC_array();
void print_Test();
friend class MinPriority; //allow MinPriority to access private functions/variables
private:
class Edge
{
public:
Edge(string vertex, int weight)
{m_vertex = vertex; m_weight = weight;}
~Edge(){}
string m_vertex;
int m_weight;
};
void get_adjLine(vector<Edge>&, string targetVertex);
vector< list<Edge> > adjList;
};
#endif // GRAPH_H_INCLUDED
和最小优先级。
#ifndef MINPRIORITY_H_INCLUDED
#define MINPRIORITY_H_INCLUDED
#include <iostream>
#include <string>
#include <vector>
#include <list>
using namespace std;
class Graph; //letting MinPriority know about Graph
class Edge; //letting MinPriority know about Graph::Edge
class MinPriority
{
//Min heap property: A[PARENT(i)] <= A[i];
public:
MinPriority();
~MinPriority();
void createArray();
void MIN_HEAPIFY(int);
void BUILD_MIN_HEAP(int);
string HEAP_MINIMUM();
void INSERT(int);
int HEAP_SIZE();
int PARENT(int);
int LEFT(int);
int RIGHT(int);
private:
class priority
{
priority(string preVertex, string vertex, int weight)
{m_preVertex = preVertex; m_vertex = vertex; m_weight = weight;}
~priority(){}
string m_preVertex;
string m_vertex;
int m_weight;
};
vector<priority> heapArray;
vector<priority> priorityQueue;
};
#endif // MINPRIORITY_H_INCLUDED
首先,Graph::get_adjLine
不是静态成员函数,所以不能这样调用它:
Graph::get_adjLine(....)
您需要在实例上调用它:
Graph g = ....;
g.get_adjLine(.....);
其次,您需要向其传递一些参数。您似乎在函数调用中使用了函数声明语法:
Graph::get_adjLine(vector&adjList, string targetVertex);
应该是这样的
g.get_adjLine(someEdgeVector, someString);
您是否正在尝试这样做:
void MinPriority::createArray()
{
Graph::get_adjLine(vector<Edge>& adjList, string targetVertex);
}
实际上,由于adjList
是Graph
类的成员,因此不需要将其作为成员函数中的参数传递。您可以直接使用它。
相关文章:
- 创建引用向量的优雅方式
- C++重新引用向量中的值
- 取消引用向量时出现问题
- 从类返回引用向量
- 引用向量中的特定索引
- 如何取消引用向量迭代器
- 对唯一 ptr 无效读取的引用向量
- 在引用向量时使用访问器进行迭代C++
- 对模板函数的引用向量
- 必须调用对非静态成员函数的引用(向量)
- 常量引用向量向量<向量<long>>赋值不编译
- 结构中的按引用向量
- C++的新手,程序在取消引用向量的一部分时没有响应
- C++:试图通过引用向量来理解传递
- C++ 按引用向量
- c++ 函数,将数据返回到引用向量
- 调用"new"以存储到shared_ptr的引用向量中
- C++逗号运算符重载和引用向量
- 构造函数中的引用向量:未初始化的引用
- 在c++中自动引用向量