Я переключился на 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
В объявлении функции в c++ ключевое слово struct не требуется. Он думает, что вы пытаетесь отправить декларацию структуры. На самом деле вам нужно только структурированное ключевое слово в определении структуры.
Поскольку вы не опубликовали полную программу, я сделаю это. Добавьте или удалите строки, чтобы дублировать свою ошибку, или сообщите нам, что вы видите ниже, чего не было в вашей программе.
Обратите внимание, что я удалил посторонние ключевые слова "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;
}
find_two_smallest
как функция-член в классе с именемHuffman
или нет. Кроме того, трудно сказать, где у вас естьnode
и где у вас естьNode
.