Синтаксическая ошибка объявления в функции

Пожалуйста, помогите мне решить эту проблему. Я тоже набирал код в школе, даже там он показывал синтаксическую ошибку объявления. --- Не могу понять! . Это так расстраивает, когда вы только начали изучать кодирование.

Пустая ошибка выпуска: ошибка синтаксиса объявления Пустая ошибка отображения: незаконное использование указателя

Извиняюсь, если какую-то глупость во мне нашел.

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>


class book
{
char bookname[20];
char isbn[20];
char author[20];
char category[20];
float price;
int noc;

public:

void accept()
{

cout<<"Enter book name :- \n";
gets(bookname);
cout<<"Enter isbn no of the book:- \n";
gets(isbn);
cout<<"Enter authour name:- \n";
gets(author);
cout<<"Enter category of book:- \n";
gets(category);
cout<<"Enter price of the book :- \n";
cin>>price;
cout<<"Enter no of copies of book available in the library :- \n";
cin>>noc;
}

void display()
{
puts(bookname)<<endl;
puts(isbn)<<endl;
puts(author)<<endl;
puts(category)<<endl;
cout<<price<<endl;
cout<<noc<<endl;
}

}b[5];

int main()
{
for(int i=0;i<5;++i)
{
b[i].accept();
}

void issue()
{
int flag=0;
char booksearch[20];
cout<<"Enter name of book member wants to issue :- \n"
gets(booksearch);
  for(i=0;i<5;++i)
  {
      flag=strcmp(booksearch,b[i].bookname)
  }

}

 if(flag==1)
 {
   b[i].display();
   b[i].issue();
 }
 getch();
 return 0;
 }

person harshadwani    schedule 23.04.2016    source источник
comment
можете ли вы быть более конкретным.. и опубликовать еще немного своего кода   -  person Pavan    schedule 23.04.2016
comment
Добро пожаловать в StackOverflow! Пожалуйста, найдите время, чтобы просмотреть stackoverflow.com/help/mcve. В частности, вы должны включить в свой вопрос полную скопированную ошибку.   -  person Dan Cornilescu    schedule 23.04.2016
comment
Вы используете обычный текстовый редактор или текстовый процессор?   -  person Thomas Matthews    schedule 23.04.2016


Ответы (2)


В вашем коде много ошибок:

  1. Отсутствие точки с запятой после вызова strcmp:
  2. strcmp возвращает 0, когда есть совпадение, а не 1, и вы потенциально перезаписываете флаг на следующей итерации цикла,
  3. Ваше определение issue находится в середине main,
  4. Вы смешиваете методы C-стиля и оператора C++-стиля >>,
  5. Вы смешиваете - плохо - c-style puts и оператор ‹‹

Вот нерабочая версия вашего кода: http://ideone.com/sGdXcm

Вот исправленная, рабочая версия:

#include <iostream>
#include <string>
#include <array>
#include <limits>

using namespace std;

class book
{
    std::string bookname;
    std::string isbn;
    std::string author;
    std::string category;
    float price;
    int noc;

public:
    const std::string& getBookname() const { return bookname; }
    const std::string& getISBN() const { return isbn; }
    const std::string& getAuthor() const { return author; }
    const std::string& getCategory() const { return category; }
    float getPrice() const { return price; }
    float getNoC() const { return noc; }

    void accept()
    {
        cout<<"Enter book name :- \n";
        std::getline(std::cin, bookname);
        cout<<"Enter isbn no of the book:- \n";
        std::getline(std::cin, isbn);
        cout<<"Enter authour name:- \n";
        std::getline(std::cin, author);
        cout<<"Enter category of book:- \n";
        std::getline(std::cin, category);
        cout<<"Enter price of the book :- \n";
        std::cin>>price;
        cout<<"Enter no of copies of book available in the library :- \n";
        std::cin>>noc;
        std::cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
    }

    void display()
    {
        std::cout<<bookname<<std::endl;
        std::cout<<isbn<<std::endl;
        std::cout<<author<<std::endl;
        std::cout<<category<<std::endl;
        std::cout<<price<<std::endl;
        std::cout<<noc<<std::endl;
    }

    void issue()
    {
    }
};

int main()
{
    std::array<book, 5> b;
    for(int i=0;i<b.size();++i)
    {
        b[i].accept();
    }

    std::string booksearch;
    std::cout<<"Enter name of book member wants to issue :- \n";
    std::getline(cin, booksearch);
    std::cout<<"Searching for: " << booksearch << "\n";
    for(int i=0;i<b.size();++i)
    {
        if (b[i].getBookname() == booksearch)
        {
            b[i].display();
            b[i].issue();
            break;
        }
    }

    std::string dummy;
    std::cout << "Hit return:";
    std::getline(std::cin, dummy);

    return 0;
}

Демонстрация в реальном времени: http://ideone.com/p3Ygw3.

Примечание. Я не добавлял в этот код проверку ошибок, если пользователь сделает опечатку при вводе книг, все пойдет не так.

person kfsone    schedule 23.04.2016

  1. Добавьте точку с запятой после строки flag=strcmp (searchbook, b [I]. bookname).
  2. Объявите flag, searchbook, b, если они еще не объявлены.
  3. Сделайте #include <string.h> перед вашей функцией
person Hammerzeit    schedule 23.04.2016