gpt4 book ai didi

c++ - 如何创建嵌套类的对象?

转载 作者:太空宇宙 更新时间:2023-11-04 15:20:25 26 4
gpt4 key购买 nike

我正在尝试访问我的嵌套类,以便我可以在此函数中返回对象:

Graph::Edge Graph::get_adj(int i)
{
Graph::Edge v;
int count = 0;
for(list<Edge>::iterator iterator = adjList[i].begin(); count <= i ;++iterator)
{
v.m_vertex = iterator->m_vertex;
v.m_weight = iterator->m_weight;
}
return v;
}

不要担心 for 循环(理论上它应该可以工作)我的主要问题是声明对象 Graph::Edge v; 它不起作用!这是我得到的错误:

$ make -f makefile.txt
g++ -Wall -W -pedantic -g -c Graph.cpp
Graph.cpp: In member function `Graph::Edge Graph::get_adj(int)':
Graph.cpp:124: error: no matching function for call to `Graph::Edge::Edge()'
Graph.cpp:43: note: candidates are: Graph::Edge::Edge(const Graph::Edge&)
Graph.h:27: note: Graph::Edge::Edge(std::string, int)
makefile.txt:9: recipe for target `Graph.o' failed
make: *** [Graph.o] Error 1

我要访问

Graph.h:27: note:                 Graph::Edge::Edge(std::string, int)

以下是我的类 Graph 的声明方式:(为了简单起见,我去掉了函数和一些东西,并使其更易于阅读)*

class Graph
{
private:
vector< list<Edge> > adjList;
public:
Graph();
~Graph();
class Edge
{
public:
Edge(string vertex, int weight)
{
m_vertex = vertex;
m_weight = weight;
}
~Edge(){}
string m_vertex;
int m_weight;
};

vector < list < Edge > > get_adjList(){return adjList;}
//Other functions....

};

基本上,我只需要知道在此函数中声明 Edge 对象的正确方法即可。我真的很困惑,不知道除了 Graph::Edge v 还能做什么;

最佳答案

Graph::Edge 没有默认构造函数(不带参数的构造函数)- 它只有一个带 stringint 的构造函数。您要么需要像这样提供默认构造函数:

Edge()
{
// ...
}

或者在构造对象时传递一个string和一个int:

Graph::Edge v("foo", 1);

关于c++ - 如何创建嵌套类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20724883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com