我已经从 c 切换到 c++。我已经在 c 中做过这种事情 (请暂时不要挖掘其余代码,只看调用函数的方式find_two_smallest();
它是在 c 中定义,然后在 c++ 中调用。定义和声明)因为问题就在那里,没有其他地方:我已经写了完整的代码,因为我提到了给出错误的行号。
void huffman()
{
struct node *temp, *pmin1, *pmin2, *pt = tree;
while(remaining>2)
{
find_two_smallest(&pmin1, &pmin2);//please pay attention on this function
}
这个函数调用在 c 中的定义是: void Huffman::find_two_smallest(struct Node **pmin1, struct Node **pmin2) { 结构节点 *ppt, *pt = 树; 结构节点 *min1 = 树; 结构节点 *min2 = NULL; ppt = NULL; 而(pt!= NULL) { 如果(pt->is_processed == 0) { 如果(pt->freq < min1->freq) { min2=min1; min1 = ppt; } } ppt=pt; pt = pt->下一个; } *pmin1 = min1; *pmin2 = min2;
这一切都在 c 中,而且工作得非常好。其实我想找到两个最小值。而我的结构是:
struct node
{
unsigned int symbol;
int freq;
struct node *left, *right,*next;
int id;
int is_processed;
};
struct node *tree;
我在 C++ 中做同样的事情。除了我使用“节点”而不是“节点”之外,我还需要在 Huffman 类中声明这个 find_two_smallest() 函数。我喜欢这样:
void find_two_smallest(struct Node **pmin1, struct Node **pmin2);
鉴于我这样做的定义:我已经写下行号来预测错误:*
31 void find_two_smallest(struct Node **pmin1, struct Node **pmin2)
32 {
33 struct Node *ppt, *pt = tree;
34 struct Node *min1 = tree;
35 struct Node *min2 = NULL;
36 ppt = NULL;
37 while(pt!=NULL)
38 {
39 if(pt->is_processed == 0)
40 {
41 if(pt->freq < min1->freq)
42 {
43 min2=min1;
44 min1 = ppt;
45 }
46 }
47 ppt = pt;
48 pt = pt->next;
49 }
50 *pmin1 = min1;
51 *pmin2 = min2;
52 }
而函数调用的方式与我在 C 中的方式相同。 结果是大量的错误。我是刚从 c 切换到 c++ 的初学者。有什么帮助吗? 您可以看到我在上面给出的对应错误的行号 错误:
fz.c: In member function ‘void Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)’:
fz.c:33:25: error: cannot convert ‘Huffman::Node*’ to ‘Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node*’ in initialization
fz.c:34:22: error: cannot convert ‘Huffman::Node*’ to ‘Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node*’ in initialization
fz.c:39:9: error: invalid use of incomplete type ‘struct Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node’
fz.c:33:8: error: forward declaration of ‘struct Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node’
fz.c:41:11: error: invalid use of incomplete type ‘struct Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node’
fz.c:33:8: error: forward declaration of ‘struct Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node’
fz.c:41:24: error: invalid use of incomplete type ‘struct Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node’
fz.c:33:8: error: forward declaration of ‘struct Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node’
fz.c:48:11: error: invalid use of incomplete type ‘struct Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node’
fz.c:33:8: error: forward declaration of ‘struct Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node’
fz.c:50:11: error: cannot convert ‘Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node*’ to ‘Huffman::Node*’ in assignment
fz.c:51:11: error: cannot convert ‘Huffman::find_two_smallest(Huffman::Node**, Huffman::Node**)::node*’ to ‘Huffman::Node*’ in assignment
最佳答案
在 C++ 的函数声明中不需要 struct 关键字。它认为您正试图转发声明该结构。事实上,您只需要结构定义中的结构关键字。
关于c++ - 从 C 切换到 C++ 时,在 C++ 中使用双指针的函数声明和定义会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081910/