Форум программистов, компьютерный форум CyberForum.ru

error C2228: left of '.add' must have class/struct/union type. в чем ошибка? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как скрыть из командной строки мигающую черту? http://www.cyberforum.ru/cpp-beginners/thread632652.html
Как скрыть из командной строки мигающую черту?
C++ меню для Telnet Доброго времени суток! Подскажите пожалуйста с такой вот проблемой: В прошивке написанной на си делаю что-то вроде интерфейса для Telnet. Чтоб при подключении к железке через Telnet ввести "s" а в ответ "Enter a command " вводишь набор символов и они записываются в буфер пока не нажмешь на ентер. Вот как я понял это, но чет нихрена не работает. Помогите пожалуйста //подключился к железке... http://www.cyberforum.ru/cpp-beginners/thread632611.html
Перегрузка new и delete C++
Помогите пожалуйста разобраться! Непонимаю примера из Т.А. Павловская "C/C++ Программирование на языке высокого уровня" для большей ясности цитирую Перегрузка операции выделения памяти применяется для экономии памяти, повышения быстродействия программы или для размещения данных в некоторой конкретной области. Например, пусть описывается класс, содержащий указатель на некоторый объект: ...
Сравнение int с элементом enum C++
Доброго времени суток. У меня возник вопрос следующего содержания: Пишу прогу на Qt, в некоторой части программы необходимо произвести перебор по перечислению: enum SearchParameter { Id, Title, Author, Word,
C++ Определение конца строки http://www.cyberforum.ru/cpp-beginners/thread632540.html
Могу ля как то определить, закончилась ли строка через символ \n? Он занимает одну позицию, или две?
C++ Удалить из строки все подстроки Помогите пожалуйста написать функцию удаляющую из строки s все подстроки s1 с испотльзованием <string> Добавлено через 1 минуту void mydelete(string s, string s1) { int r=0; int k=s.find(s1,r); int t=s1.size(); { while(k!=string::npos) подробнее

Показать сообщение отдельно
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
04.08.2012, 09:08     error C2228: left of '.add' must have class/struct/union type. в чем ошибка?
C++
1
book *a=new book[n];
Здесь a - указатель. Но каждый элемент массива, то есть a[0]...a[n-1] указателями не являются. Поэтому обращаться к их полям нужно без разыменования:

C++
1
2
for (int i=0; i<n; i++)
    a[i].vivod();
И вообще, раз уж объект хранит информацию об одной книге, почему в методе add цикл? Вы пытаетесь добавить информацию сразу о нескольких?

В любом случае так как у вас сделано, это не получится... Такая штука будет записывать данные только в первый объект:
C++
1
(*a).add(n);
Это то же самое, что
C++
1
a[0].add(n);
Вот рабочий код с минимальными изменениями:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
using namespace std;
 
class book
{
    private:
    char name_book[20];
    char name_avtor[20];
    int number;
 
public:
 
    void add()
    {
        cout << "Please enter the book name: ";
        cin >> name_book; 
        cout << "Please enter the author's name: ";  
        cin >> name_avtor; 
        cout << endl;
    }
    
    void print() const
    {
        cout << name_book << " " << name_avtor << endl;
    }
};
 
 
int main()
{
    cout<<"Skolko y vas knig: ";
    int n;
    cin>>n;
    
        
    book * a = new book[n];
         
    for (int i = 0; i < n; i++)
        a[i].add();
        
    for (int i = 0; i < n; i++)
        a[i].print();
 
 
    delete [] a;
}
Добавлено через 3 минуты
И да, лучше использовать cin.getline для ввода строк, чтобы можно было контролировать длину строк и вводить названия с пробелами (а раз уж C++, так вообще используйте класс string). И уж совсем по-хорошему, надо избавить методы от консольного ввода/вывода, а объекты инициализировать либо в конструкторе, либо устанавливать значения set-функциями.
 
Текущее время: 00:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru