Ошибка C3861: идентификатор не найден; Что делать? - PullRequest
2 голосов
/ 12 апреля 2020

Я пытаюсь составить список, отличный от stl, и найти в нем наиболее распространенный номер. Решил сначала написать функции, необходимые для возможности ввода элементов, а также для печати списка, чтобы я мог проверить, все ли в порядке. Все идет нормально. Затем, когда я попытался написать функцию, чтобы найти наиболее распространенный элемент, начались проблемы. Я думал искать элементы один за другим и иметь переменную, которая будет увеличиваться на 1 каждый раз, когда я сталкиваюсь с числом. До сих пор мне удавалось иметь только функцию, которая ищет только один элемент, который я выбрал. Однако это продолжает давать мне ошибку. Не уверен, как поступить. Я хотел иметь возможность изменить функцию для поиска наиболее распространенного элемента, но сначала хотел убедиться, что она работает как есть. Ты хоть представляешь, где моя ошибка?

#include <iostream>
using namespace std;

void add_е(int n);
void list();

 struct elem 
 {
    int key; 

    elem *next; 
 } *start=NULL; 


int main()
    {  
        int ch, num, amount, i, element;
    do
    {   cout<<"\n\t Menu";
        cout<<"\n 1.Add elements";
        cout<<"\n 2.Find the most common element";
        cout<<"\n 3.Print the stack";
        cout<<"\n 4.Exit";
    do
    {   cout<<"\n Your choice is:";
        cin>>ch;
    }
    while (ch<1||ch>4);
    switch(ch)
{

    case 1: 
        cout<<"\n How many elements do you want to add?";
        cin>>amount;
        for(i=0; i<amount; i++)
        {
            cout<<"Input stack elements:\n";
            cin>>num;
            add_е(num);
        }
    break;


    case 2:
        cout<<"\n Which element do you want to find? \n ";
        cin>>element;
        search_elem(element);   // here it gives me an error
        break;


    case 3: list();
    break;
}

}while(ch!=4); 
}

void add_е(int n) {  elem *p=start, *q=p;
    q=new elem;      
    q->key=n;    
    q->next=NULL;   
if (start)      
    {  
        while (p->next)
        p=p->next;  
        p->next=q;  
    }   
else    
    start=q;    
}       



void list()  
{   
    if (start) 
    { 
        elem *p=start;
        cout<<"\n List is: \n";
        while (p) 

        { 
            cout<<p->key<<"\n"; 
            p=p->next;   
        }   
    }  
    else 
        cout<<"\n Empty list";
} 
//izvejdane na spisuka 

int search_elem(int n) 
{  
    elem *p=start; 
    if (start) 
    {
        while ((p->key!=n)&&(p->next))   
            p=p->next;  

        if (p->key==n)
    {
        cout<<"p->key"<<"\n";
        return 1; 
    }
    else 
        cout<<"No element found";
        return 0; 
    } 
    return 0; 
} 

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Вам нужно дать (как минимум) прототип функции для функции search_elem до того, как вы ее используете (как вы сделали с функциями add_е и list).

Итак, добавьте прототип в том же месте, что и для других функций:

void add_е(int n);
void list();
int search_elem(int n); // You need this BEFORE any call to the function!

Также, если ваш компилятор соответствует стандарту C++11 (или позже), вы должны использовать nullptr а не макрос NULL. И пожалуйста прочитайте это: Почему "использование пространства имен std;" считается плохой практикой? .

1 голос
/ 12 апреля 2020

e в add_е выглядит как символ Юникода. Сделайте ASCII e.

И, вперед, объявите search_elem() перед местом, где вы его называете.

Вот обновленный код: https://godbolt.org/z/h7P8R3

Другое дело, что у тебя утечка памяти. Вы выделяете память с помощью new, но не освобождаете ее с помощью delete. Об этом тоже нужно позаботиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...