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

no operator found which takes a right/left-hand operand of type "AR" - C++

Восстановить пароль Регистрация
 
SOM3BODY
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 11
20.06.2013, 14:49     no operator found which takes a right/left-hand operand of type "AR" #1
Нашел на форуме исходник программы, собрал, но выдает ошибку описанную выше
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
#include <iostream>
#include <conio.h>
#include <string.h>
#include <assert.h>
using namespace std;
class AR{ 
public:
  AR(int=5);
  AR(const AR&);
  ~AR();
int getSize() const;
const AR &operator=(double);
int operator==(const AR&) const;
int operator!=(const AR&) const;
 
double &operator[](int);
static int getCount();
 
private:
double *ptr;
int size;
static int arrCount;
};
 
AR::AR(int arrSize)
{
++arrCount;
size=arrSize;
ptr=new double[size];
assert(ptr!=0);
for(int i=0;i<size;i++)
ptr[i]=0;
}
AR::AR(const AR&init)
{
++arrCount;
size=init.size;
ptr=new double[size];
assert(ptr!=0);
for (int i=0;i<size;i++)
ptr[i]=init.ptr[i];
}
AR::~AR()
{
--arrCount;
delete []ptr;
cout<<"Destructor Vizvan dlya vectora s razmerom :"<<size<<endl;
}
int AR::getSize()const {return size;}
const AR &AR::operator=(double right)
{
ptr=new double[size];
assert(ptr!=0);
for (int i=0;i<size;i++)
ptr[i]=right;
return*this;
}
int AR::operator==(const AR&right) const
{
if(size!=right.size)
return 0;
for (int i=0;i<size;i++)
if (ptr[i]!=right.ptr[i] )
return 0;
return 1;
}
int AR::operator!=(const AR &right) const
{
if (size !=right.size)
return 1;
for (int i=0;i<size;i++)
if (ptr[i]!=right.ptr[i] )
return 1;
return 0;
}
double &AR::operator[](int ind)
{
assert (0<=ind&&ind<size);
return ptr[ind];
}
int AR::getCount() {return arrCount;}
 
#include <iostream>
 void main()
{
    
    AR array1(5),array2(5);
    cout << "Razmer massiva #1: " <<array1.getSize() <<endl;
    cout << "Massiv posle zadaniya nachalnyh znacheniy: " << endl<< array1 << endl;
    cout << "Razmer massiva #2: " << array2.getSize() << endl;
    cout << "Massiv posle zadaniya nachalnyh znacheniy: " << endl << array2 << endl;
    cout << "Vvedite 10 celih chisel: " << endl;
    cin >> array1 >> array2;
    cout << "Massivi soderjat: " << endl
         << "array#1: " << array1
         << "array#2: " << array2 << endl;
    cout << "Ocenka array#1!=array#2" << endl;
    if (array1!=array2) cout<<"Oni ne ravni"<<endl; else cout<<"Oni ravni"<<endl;
    double right2;
    cout<<"Vvedite chislo double: "<<endl;
    cin>>right2;
    cout<<"Prisvoim znachenie double -> array#2:"<<endl<<array2<<endl;
    cout<<"Prisvaivaem znachenie array#2 -> array#1: "<<endl;
    array1 = array2;
    cout<<"array#1: "<<array1<<endl;
    cout<<"array#2: "<<array2<<endl;
    cout<<"Ocenka: array#1==array#2"<<endl;
    if (array1==array2) cout<<"Oni ravni"<<endl; else cout<<"Oni ne ravni"<<endl;
    cout<<"array#1[4] = "<<array1[4]<<endl;
    double e;
    cout<<"Vvedite chislo "<<endl;
    cin>>e;
    cout<<"Prisvaivanie chisla elementu array1[4]"<<endl;
    array1[4]=e;
    cout<<"array1 :"<<array1<<endl;
    system("pause");
}
Подскажите как мне её исправить, заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2013, 14:49     no operator found which takes a right/left-hand operand of type "AR"
Посмотрите здесь:

C++ Ошибка argument of type "CGroup *" is incompatible with parameter of type "CGroup *"
C++ right-hand operand
C++ Классы: ка победить ошибку из "const Type" в "Type &"
No operator found which takes a right-hand operand C++
C++ Ошибка в Eclipse "Type Program "make" not found in PATH"
При компиляции ошибка: C2228: left of ".real",".imag" must have struct/class/union C++
Ошибка: argument of type "char *" is incompatible with parameter of type "LPCWSTR" C++
Ошибка: macro "double" passed 2 arguments but takes just 1 C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
20.06.2013, 15:15     no operator found which takes a right/left-hand operand of type "AR" #2
Чтобы это работало
endl<< array1 << endl
Нужно перегрузить операцию <<
SOM3BODY
0 / 0 / 0
Регистрация: 13.12.2012
Сообщений: 11
20.06.2013, 16:15  [ТС]     no operator found which takes a right/left-hand operand of type "AR" #3
Спасибо за помощь.

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
#include <conio.h>
#include <string.h>
#include <assert.h>
#include <iostream>
using namespace std;
class AR{ 
    friend ostream &operator<< (ostream &, const AR &);
friend istream &operator>> (istream &, AR &);
public:
  AR(int=5);
  AR(const AR&);
  ~AR();
int getSize() const;
const AR &operator=(double);
int operator==(const AR&) const;
int operator!=(const AR&) const;
 
double &operator[](int);
static int getCount();
 
private:
double *ptr;
int size;
static int arrCount;
};
 
AR::AR(int arrSize)
{
++arrCount;
size=arrSize;
ptr=new double[size];
assert(ptr!=0);
for(int i=0;i<size;i++)
ptr[i]=0;
}
AR::AR(const AR&init)
{
++arrCount;
size=init.size;
ptr=new double[size];
assert(ptr!=0);
for (int i=0;i<size;i++)
ptr[i]=init.ptr[i];
}
AR::~AR()
{
--arrCount;
delete []ptr;
cout<<"Destructor Vizvan dlya vectora s razmerom :"<<size<<endl;
}
int AR::getSize()const {return size;}
const AR &AR::operator=(double right)
{
ptr=new double[size];
assert(ptr!=0);
for (int i=0;i<size;i++)
ptr[i]=right;
return*this;
}
int AR::operator==(const AR&right) const
{
if(size!=right.size)
return 0;
for (int i=0;i<size;i++)
if (ptr[i]!=right.ptr[i] )
return 0;
return 1;
}
int AR::operator!=(const AR &right) const
{
if (size !=right.size)
return 1;
for (int i=0;i<size;i++)
if (ptr[i]!=right.ptr[i] )
return 1;
return 0;
}
double &AR::operator[](int ind)
{
assert (0<=ind&&ind<size);
return ptr[ind];
}
istream &operator>>(istream &input,AR &a)
{
for (int i=0;i<a.size;i++)
input>>a.ptr[i];
return input;
}
 
 
ostream &operator<<(ostream &output,const AR &a)
{
    for (int i=0;i<a.size;i++){
output<<a.ptr[i]<<" ";
if ((i+1)%10==0)
output<<endl;
return output;}
}
int AR::getCount() {return arrCount;}
 
 
#include <iostream>
int main()
{
    
    AR array1(5),array2(5);
    cout<<"Razmer massiva #1: "<<array1.getSize()<<endl;
    cout<<"Massiv posle zadaniya nachalnyh znacheniy: "<<endl<<array1<<endl;
    cout << "Razmer massiva #2: " << array2.getSize() << endl;
    cout << "Massiv posle zadaniya nachalnyh znacheniy: " << endl << array2 << endl;
    cout << "Vvedite 10 celih chisel: " << endl;
    cin >> array1 >> array2;
    cout << "Massivi soderjat: " << endl
         << "array#1: " << array1
         << "array#2: " << array2 << endl;
    cout << "Ocenka array#1!=array#2" << endl;
    if (array1!=array2) cout<<"Oni ne ravni"<<endl; else cout<<"Oni ravni"<<endl;
    double right2;
    cout<<"Vvedite chislo double: "<<endl;
    cin>>right2;
    cout<<"Prisvoim znachenie double -> array#2:"<<endl<<array2<<endl;
    cout<<"Prisvaivaem znachenie array#2 -> array#1: "<<endl;
    array1 = array2;
    cout<<"array#1: "<<array1<<endl;
    cout<<"array#2: "<<array2<<endl;
    cout<<"Ocenka: array#1==array#2"<<endl;
    if (array1==array2) cout<<"Oni ravni"<<endl; else cout<<"Oni ne ravni"<<endl;
    cout<<"array#1[4] = "<<array1[4]<<endl;
    double e;
    cout<<"Vvedite chislo "<<endl;
    cin>>e;
    cout<<"Prisvaivanie chisla elementu array1[4]"<<endl;
    array1[4]=e;
    cout<<"array1 :"<<array1<<endl;
    return 0;
    system("pause");
}
Перегрузил ввод, вывод.

Компилируется без проблем, при билде выдает ошибки:
Error 1 error LNK2001: unresolved external symbol "private: static int AR::arrCount" (?arrCount@AR@@0HA) lab3_3.obj
Error 2 fatal error LNK1120: 1 unresolved externals C:\Users\adm\Desktop\Лабы\Новая папка\lab3_4\Debug\lab3_4.exe

В чем проблема?
Yandex
Объявления
20.06.2013, 16:15     no operator found which takes a right/left-hand operand of type "AR"
Ответ Создать тему
Опции темы

Текущее время: 16:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru