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

компилятор считает объект l-value, но объект таковым не является - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Зеркальное отображение слов http://www.cyberforum.ru/cpp-beginners/thread808569.html
Помогите пожалуйста, я не знаю, вообще не имею представления, как сделать данное задание: В каждой строке удалить пары слов, в которых одно слово является зеркальным отображением второго.
C++ Конструктор перемещения и оптимизация Имеем тестовый код: #include <iostream> using namespace std; struct A { A( int v ) { cout << "ctor" << endl; this->v = new int(v); http://www.cyberforum.ru/cpp-beginners/thread808564.html
Хеш таблица и файлы C++
Нужно создать файл (формата *.тхт) определенного размера для базы данных. В этом файле должна быть записана хеш таблица. как создать файл и зарезервировать для него место я знаю, а вот как его заполнить шапками хеш таблицы и внутри него делать указатели на нужное место я не знаю. именно эти указатели и заводят меня в тупик.
C++ Как перегрузить оператор ввода из файла?
Допустим у нас есть класс: class A {friend ifstream &operator>>(ifstream &, A &); private: char a; char b; }; И как перегрузить этот оператор для него? Добавлено через 8 минут
C++ Вычислить значение выражения http://www.cyberforum.ru/cpp-beginners/thread808531.html
помогите решить!Поясняющие изображения загружайте на форум в виде вложений. А лучше освойте встроенный редактор формул. Для второй и третьей задачи создайте отдельные темы.
C++ Массивы A[15], D[15] Использование функций, возвращающих одно значение. Даны целочисленные массивы A, D. Для каждого массива определить количество элементов, предшествующих первому максимальному элементу. Помогите!!!!!!! Уже 3 часа инет юзаю и не могу нечего стоющего для себя найти! Вот, что смог только написать!!! #include <iostream.h> #include <conio.h> подробнее

Показать сообщение отдельно
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36

компилятор считает объект l-value, но объект таковым не является - C++

14.03.2013, 16:58. Просмотров 380. Ответов 2
Метки (Все метки)

итак
есть базовый абстрактный класс Дерево, есть два его наследника Плодовое Дерево и Лесное Дерево. Также существует класс Контейнер Деревьев. В функции добавления в контейнер выскакивает ошибка "error C2166: l-value specifies const object", не могу понять, почему

head.h
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#ifndef _TREEE_
#define _TREEE_
#include <iostream>
#include <cmath>
using namespace std;
enum Type {list, hvoy};
class Tree{
protected:
    friend class Cont;
    const int ID;
    char * Name;
    unsigned Age;
    const Type Tip;
    static int ID_Repository;
    static public void SetID_Repository (int a) {ID_Repository=a;}
public:
    Tree();
    Tree(char * aName, unsigned aAge, Type aTip);
    Tree (const Tree& Ob);
    virtual ~Tree();
    int GetID() const ;
    char * GetName () const;
    unsigned GetAge () const;
    Type GetTip ()const;
    bool operator < (const Tree & e) const;
    bool operator == (const Tree & e) const;
    void SetAge (unsigned aAge);
    void SetName (const char * aName);
    virtual void InStream (ostream& out)=0;
    void Print ();
    void operator = (const Tree & e);
};
class LesTree: public Tree {
protected:
    double Drev;
public:
    LesTree();
    LesTree(char * aName, unsigned aAge, Type aTip, double aDrev);
    LesTree (const LesTree& Ob);
    ~LesTree();
    int GetID() const;
    char * GetName () const;
    unsigned GetAge () const;
    double GetDrev () const;
    Type GetTip ()const;
    bool operator < (const LesTree & e) const{return Tree::operator < (e);}
    bool operator == (const LesTree & e) const{return Tree::operator == (e);}
    void SetAge (unsigned aAge);
    void SetName (const char * aName);
    void SetDrev (double aDrev);
    void InStream (ostream& out);
    LesTree& operator = (const LesTree & e);
};
class PlodTree : public Tree{
    protected:
    double Mas;
    double Hran;
public:
    PlodTree();
    PlodTree(char * aName, unsigned aAge, Type aTip, double Mas, double Hran);
    PlodTree (const PlodTree& Ob);
    ~PlodTree();
    int GetID() const;
    char * GetName () const;
    unsigned GetAge () const;
    double GetMas () const;
    double GetHran () const;
    Type GetTip ()const;
    bool operator < (const PlodTree & e) const {return Tree::operator <(e);}
    bool operator == (const PlodTree & e) const {return Tree::operator == (e);}
    void SetAge (unsigned aAge);
    void SetName (const char * aName);
    void SetMas (double aMas);
    void SetHran (double aHran);
    void InStream (ostream& out);
    PlodTree& operator = (const PlodTree & e);
};
class Cont {
    Tree **info;
    int capacity,count;
public:
    Cont(int an=3):capacity(an),count(0){
        info=new Tree*[capacity];
    }
    Cont (const Cont & Ob){
        capacity=Ob.capacity;
        count=Ob.count;
        info=new Tree*[capacity];
        for (int i=0;i<count;i++)
            *info[i]=*Ob.info[i];
    }
    ~Cont ()
    {
        for (int i = 0; i < count; ++i)
            delete info[i];
        delete [] info;
        count = 0;
    }
    bool isEmpty(){return (count==0);}
    bool Add (const Tree* a)const
    {
        if (count == capacity) return false;
        if (typeid(a) == typeid(LesTree))
        {
             char * Name=a->GetName();
             int Age=a->GetAge();
             Type Tip=a->GetTip();
             double Drev=((LesTree*)a)->GetDrev();
             LesTree *k=new LesTree(Name,Age,Tip,Drev);
             info[count++]=k;}
        else
        {
             char * Name=a->GetName();
             int Age=a->Age;
             Type Tip=a->Tip;
             double Mas=((PlodTree*)a)->GetMas();
             double Hran=((PlodTree*)a)->GetHran();
             PlodTree *k=new PlodTree(Name,Age,Tip,Mas,Hran);
             info[count++]=k;}
        return true;}
    void Print (){
        for (int i=0;i<count;i++)
        {
            (*info[i]).InStream(cout);
            cout<<endl;}
    }
    Tree& operator [] (int i){
        return *info[i];}
    int ListCounter (){
        int listcount=0;
        for (int i=0;i<count;i++)
            if ((*info[i]).Tip==list) listcount++;
        return listcount;}
    void SortName (){
        for (int i=0;i<count;i++)
            for (int j=0;j<count-1;j++)
                if (strcmp((*info[i]).Name,(*info[i+1]).Name)>0){
                    char * s=new char[strlen((*info[i]).Name)+1];
                    strcpy(s,(*info[i]).Name);
                    delete [](*info[i]).Name;
                    (*info[i]).Name=new char[strlen((*info[i+1]).Name)+1];
                    strcpy((*info[i]).Name,(*info[i+1]).Name);
                    delete [](*info[i+1]).Name;
                    (*info[i+1]).Name=new char[strlen(s)+1];
                    strcpy((*info[i+1]).Name,s);
                    delete []s;}
    }
    void SortAge(){
        for (int i=0;i<count;i++)
            for (int j=0;j<count-1;j++)
                if( (*info[i]).Age<(*info[i+1]).Age)
                {
                    (*info[i]).Age+=(*info[i+1]).Age;
                    (*info[i+1]).Age=(*info[i]).Age-(*info[i+1]).Age;
                    (*info[i]).Age-=(*info[i+1]).Age;
                }
    }
};
#endif
real.cpp
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "head.h"
char *tip[2]={"Лиственное","Хвойное"};
int Tree::ID_Repository = 0;
Tree::Tree():ID(ID_Repository++),Age(100),Tip(list){
    char * s = "Дуб";
    Name=new char[strlen(s)+1];
    strcpy(Name,s);
}
Tree::Tree(char * aName, unsigned aAge, Type aTip):ID(ID_Repository++),Age(aAge),Tip(aTip){
    Name=new char[strlen(aName)+1];
    strcpy(Name,aName);
}
Tree::Tree (const Tree& Ob):Age(Ob.Age),Tip(Ob.Tip),ID(ID_Repository++){
    Name=new char [strlen(Ob.Name)+1];
    strcpy(Name,Ob.Name);
}
Tree::~Tree(){
    delete []Name;
}
int Tree::GetID() const {
    return ID;
}
char * Tree::GetName () const{
    char * s=new char[strlen(Name)+1];
    strcpy (s,Name);
    return s;
}
unsigned Tree::GetAge () const{
    return Age;
}
Type Tree::GetTip ()const{
    return Tip;
}
bool Tree::operator < (const Tree & e) const{
    if (strcmp(Name,e.Name)<0)
        return true;
    return false;
}
bool Tree::operator == (const Tree & e) const{
    if (strcmp(Name,e.Name)==0)
        return true;
    return false;
}
void Tree::SetAge (unsigned aAge){
    Age=aAge;
}
void Tree::SetName (const char * aName){
    delete []Name;
    Name=new char[strlen(aName)+1];
    strcpy(Name,aName);
}
void Tree::operator = (const Tree & e){}
void Tree::Print (){
    cout<<"Возраст: "<<Age<<" Тип: "<<tip[Tip]<<" Имя: ";
    puts(Name);
}
LesTree::LesTree():Tree("Дуб",100,list),Drev(23){}
LesTree::LesTree(char * aName, unsigned aAge, Type aTip, double aDrev):Tree(aName, aAge, aTip),Drev(aDrev){}
LesTree::LesTree (const LesTree& Ob):Tree(Ob.Name,Ob.Age,Ob.Tip),Drev(Ob.Drev){}
LesTree::~LesTree(){}
int LesTree::GetID() const {return ID;}
char * LesTree::GetName () const{
    char * s=new char[strlen(Name)+1];
    strcpy(s,Name);
    return s;}
unsigned LesTree::GetAge () const {return Age;}
double LesTree::GetDrev () const {return Drev;}
Type LesTree::GetTip ()const {return Tip;}
void LesTree::SetAge (unsigned aAge){Age=aAge;}
void LesTree::SetName (const char * aName){
    delete []Name;
    Name=new char[strlen(aName)+1];
    strcpy(Name,aName);
}
void LesTree::SetDrev (double aDrev){Drev=aDrev;}
void LesTree::InStream (ostream& out){
    out<<"Имя: "<<Name<<" Возраст: "<<Age<<" Идентификатор: "<<ID<<" Масса древесины: "<<Drev<<" Тип: "<<tip[Tip];}
LesTree& LesTree::operator = (const LesTree & e){
    if (&e!=this)
    {
        Age=e.Age;
        delete []Name;
        Name=new char [strlen(e.Name)+1];
        strcpy(Name,e.Name);
        Drev=e.Drev;}
    return *this;
}
PlodTree::PlodTree():Tree("Яблоня",10,list),Mas(10.5),Hran(3){}
PlodTree::PlodTree(char * aName, unsigned aAge, Type aTip, double aMas, double aHran):Tree(aName,aAge,aTip),Mas(aMas),Hran(aHran){}
PlodTree::PlodTree (const PlodTree& Ob):Tree(Ob.Name,Ob.Age,Ob.Tip),Mas(Ob.Mas),Hran(Ob.Hran){}
PlodTree::~PlodTree(){}
int PlodTree::GetID() const {return ID;}
char * PlodTree::GetName () const {
    char *s=new char[strlen(Name)+1];
    strcpy(s,Name);
    return s;}
unsigned PlodTree::GetAge () const {return Age;}
double PlodTree::GetMas () const {return Mas;}
double PlodTree::GetHran () const {return Hran;}
Type PlodTree::GetTip ()const {return Tip;}
//bool PlodTree::operator < (const PlodTree & e) const;//?
//bool PlodTree::operator == (const PlodTree & e) const;//?
void PlodTree::SetAge (unsigned aAge){Age=aAge;}
void PlodTree::SetName (const char * aName){
    delete []Name;
    Name=new char[strlen(aName)+1];
    strcpy(Name,aName);}
void PlodTree::SetMas (double aMas) {Mas=aMas;}
void PlodTree::SetHran (double aHran){Hran=aHran;}
void PlodTree::InStream (ostream& out){
    out<<"Имя: "<<Name<<" Возраст: "<<Age<<" Идентификатор: "<<ID<<" Масса плода: "<<Mas<<" Время хранения: "<<Hran<<" Тип: "<<tip[Tip];}
PlodTree& PlodTree::operator = (const PlodTree & e){
    if (this!=&e)
    {
        Age=e.Age;
        Mas=e.Mas;
        Hran=e.Hran;
        delete []Name;
        Name=new char [strlen(e.Name)+1];
        strcpy(Name,e.Name);
    }
    return *this;
}
main.cpp
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
47
#include "head.h"
#include <fstream>
    int main ()
    {
        setlocale (LC_ALL,".1251");
        ifstream in("input.txt");
        PlodTree pa("Груша",1,list,0,0);
        PlodTree pb("Яблоня",13,list,12,6);
        if (pa<pb)
            cout<<"first is less then second"<<endl;
        else cout<<"second is less then first"<<endl;
        if(pa==pb)
            cout<<"they are equal"<<endl;
        else cout<<"they are not equal"<<endl;
        char* s;
        int i=0;
        in.getline(s,200);
        char **mas;
        char * token=strtok(s," ");
        Cont c;
        while (token)
        {
            strcpy(mas[i],token);
            token=strtok(NULL," ");
            i++;
        }
        int n=i;
        if (atoi(mas[0])==0)
        {
            if(n==5 && atoi(mas[2])>0 && strcmp(mas[3],"Лиственное")==0 && atoi(mas[4])>0){
                LesTree *k=new LesTree(mas[1],atoi(mas[2]),list,atoi(mas[4]));
                if (c.Add(k)) cout<<"everything is ok"<<endl;}
            if (n==5 && atoi(mas[2])>0 && strcmp(mas[3],"Хвойное")==0 && atoi(mas[4])>0){
                LesTree *k=new LesTree(mas[1],atoi(mas[2]),hvoy,atoi(mas[4]));
                if(c.Add(k)) cout<<"everything is ok";}
        }
        if (atoi(mas[0])==1)
        {
            if(n==6 && atoi(mas[2])>0 && strcmp(mas[3],"Лиственное")==0 && atoi(mas[4])>0 && atoi(mas[5])>0){
                PlodTree *k=new PlodTree(mas[1],atoi(mas[2]),list,atoi(mas[4]),atoi(mas[5]));
                if (c.Add(k)) cout<<"everything is ok";}
            if (n==6 && atoi(mas[2])>0 && strcmp(mas[3],"Хвойное")==0 && atoi(mas[4])>0 && atoi(mas[5])>0){
                PlodTree *k=new PlodTree(mas[1],atoi(mas[2]),hvoy,atoi(mas[4]),atoi(mas[5]));
                if(c.Add(k)) cout<<"everything is ok";}
        }
        return 0;
    }
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru