c++ - 从 C 切换到 C++ 时,在 C++ 中使用双指针的函数声明和定义会出错

标签 c++ c algorithm function-call function-declaration

我已经从 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/

相关文章:

c++ - 如何让 eclipse 运行当前打开的源文件?

c++ - 通过 cmake 文件在 Eclipse 中设置编译器特定设置和项目构建位置

c++ - 如果我从不调用这个方法,我可以把 static_assert 放在类方法中吗?

c - 检索正在运行的进程的名称

algorithm - 找到最小的片数,以便可以重新排列原始序列以形成所需的序列(时间限制)

arrays - 排列数组使其在递增和递减之间交替

c# - 在 Visual Studio 2010 中从 .NET 项目启动 C++ 项目

c - 如何包含不同文件中的函数? C

java - Android A* 寻路无限循环?

c - 数组表达式未转换为指针 当字符串字面量用于初始化字符数组时