объявление и определение функции с двойным указателем в c ++, приводящее к ошибке при переключении с c на c ++

0

Я переключился на c++ с. Я уже делал такие вещи в c (Пожалуйста, не копайте остальную часть кода, а теперь просто посмотрите способ вызова функции find_two_smallest(); это определение в c, а затем внизу в c++ оно вызывает. Definition и объявление), потому что проблема только там, Нет где еще: я написал полный код, потому что я упоминаю номера строк, которые дают ошибки.

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) {struct node * ppt, * pt = tree; struct node *min1 = tree; struct node * min1 = tree; struct node *min2 = NULL; struct node * min2 = NULL; ppt = NULL; ppt = NULL; while(pt!=NULL) { if(pt->is_processed == 0) { if(pt->freq < min1->freq) { min2=min1; while (pt! = NULL) {if (pt-> is_processed == 0) {if (pt-> freq <min1-> freq) {min2 = min1; min1 = ppt; min1 = ppt; } } ppt = pt; }} ppt = pt; pt = pt-> next; } * 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++. Кроме того, что я использовал "Node" вместо "node". Также мне нужно объявить эту функцию find_two_smallest() в классе Huffman. Что я делаю так:

 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
  • 1
    Ошибка в том, как этот код составлен. Возможно, нам нужен полный пример, который повторяет проблему. Например, только из представленного кода мы не можем определить, объявлен ли find_two_smallest как функция-член в классе с именем Huffman или нет. Кроме того, трудно сказать, где у вас есть node и где у вас есть Node .
  • 0
    Избавьтесь от лишних ключевых слов "struct" в вашем примере C ++. В отличие от C, C ++ не нужно снова и снова убеждать, что тип является структурой.
Показать ещё 5 комментариев
Теги:
algorithm
function-call
function-declaration

2 ответа

2

В объявлении функции в c++ ключевое слово struct не требуется. Он думает, что вы пытаетесь отправить декларацию структуры. На самом деле вам нужно только структурированное ключевое слово в определении структуры.

  • 0
    НЕТ, извините, это не было причиной, но спасибо за попытку помочь мне.
1

Поскольку вы не опубликовали полную программу, я сделаю это. Добавьте или удалите строки, чтобы дублировать свою ошибку, или сообщите нам, что вы видите ниже, чего не было в вашей программе.

Обратите внимание, что я удалил посторонние ключевые слова "struct" и в основном копировал и вставлял столько, сколько мог, из вашего примера. И да, он компилируется без ошибок в C++.

struct Node
{
   unsigned int symbol;
   int freq;
   Node *left, *right,*next;
   int id;
   int is_processed;
};

Node *tree;

class Huffman
{
   void find_two_smallest(Node **pmin1, Node **pmin2);
};

void Huffman::find_two_smallest(Node **pmin1, Node **pmin2)
{
    Node *ppt, *pt = tree;
    Node *min1 = tree;
    Node *min2 = 0;
    ppt = 0;
    while(pt != 0)
    {
       if(pt->is_processed == 0)
       {
           if(pt->freq < min1->freq)
           {
               min2=min1;
               min1 = ppt;
           }
       }
       ppt = pt;
       pt = pt->next;
    }
    *pmin1 = min1;
    *pmin2 = min2;
}
  • 0
    даже если я удаляю или добавляю struct, она работает нормально (может быть, вы подходите для другой версии компилятора c ++), но моя работает отлично даже после удаления или добавления "struct". Проблема была в том, что Дэвид упомянул в своем последнем комментарии.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню