gpt4 book ai didi

C++双指针未知转换

转载 作者:行者123 更新时间:2023-11-28 05:29:06 26 4
gpt4 key购买 nike

我真的被以下问题吓坏了:

template <class T> // int, float, double etc..
class Graph {
public:

// Documentation, it has to be between [0..100]
Graph(int size = 10, int density = 10, T range = 0):
m_size(size),
m_density(density),
m_range(range) {
generate();
}

~Graph() {
for (int i = 0; i < m_size; i++)
delete[] m_graph[i];
delete[] m_graph;
}

[..]

static Graph<T>* custom(T** cgraph, int size, T range) {
Graph<T> *graph = new Graph<T>(size, 10, range);
for (int i = 0; i < size; i++)
delete[] graph->m_graph[i];
delete[] graph->m_graph;
graph->m_graph = cgraph;
}


private:
T** m_graph;
[ .. ]
};

int nodes[4][4] = {
{ 6, 5, 2, 5 },
{ 5, 6, 3, 3 },
{ 1, 3, 6, 1 },
{ 5, 3, 1, 6 }
};

int main() {
Graph<int> *graph = Graph<int>::custom(nodes, 4, 5);
}

编译报以下错误是什么不好?

   g++ graph.cpp -o test_graph 
graph.cpp: In function ‘int main()’:
graph.cpp:191:55: error: no matching function for call to ‘Graph<int>::custom(int [4][4], int, int)’
Graph<int> *graph = Graph<int>::custom(nodes, 4, 5);
^
graph.cpp:60:20: note: candidate: static Graph<T>* Graph<T>::custom(T**, int, T) [with T = int]
static Graph<T>* custom(T** cgraph, int size, T range) {
^
graph.cpp:60:20: note: no known conversion for argument 1 from ‘int [4][4]’ to ‘int**’

我觉得很对,怎么了?

最佳答案

您需要通过指向 int 的指针数组来制作节点

int nodes_v[4][4] = {
{ 6, 5, 2, 5 },
{ 5, 6, 3, 3 },
{ 1, 3, 6, 1 },
{ 5, 3, 1, 6 }
};

int *nodes[4] = { nodes_v[0], nodes_v[1], nodes_v[2], nodes_v[3] };

还需要在Graph变量中添加一个额外的成员来标记它是自定义图,如果设置了,析构函数不应该删除内存。

最好为 Graph 提供一个私有(private)构造函数,该构造函数传入 custom 标志,并且如果已设置则不会分配内存。

  Graph(int size, int density, T range, bool custom):
m_size(size),
m_density(density),
m_range(range),
m_custom {
}

Graph(int size = 10, int density = 10, T range = 0):
Graph(size, density, range, false) {
generate();
}

static Graph<T>* custom(T** cgraph, int size, T range) {
Graph<T> *graph = new Graph<T>(size, 10, range, true);
graph->m_graph = cgraph;
}

最后,您需要处理复制构造函数和赋值运算符(从删除它们开始)。

关于C++双指针未知转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914655/

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