Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Vergil
42 / 36 / 17
Регистрация: 11.11.2009
Сообщений: 244
1

Ошибка при переопределении оператора в классе

16.03.2014, 08:14. Просмотров 384. Ответов 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
class bc
{public:
AnsiString str;
bool znak;
int length;
int kol;
int kol2;
bc operator+(const bc& b) const
{bc temp;
int kol1=kol, kol2=b.kol, vs=0, t=0;
 
while (1)
 
    {
        if (kol1!=0 || kol2!=0)
            {t=StrToInt(str[kol1])+StrToInt(b.str[kol2])+vs;
            vs=0;
                if (t>=10) {t=t-10; vs=1;}
            temp.str[col]=AnsiString(t);
            kol1--;
            kol2--;
            }
    }
 
}
 
 
};
bc bc1, bc2, bc3;
temp.str[col]=AnsiString(t);

[C++ Error] Unit1.cpp(33): E2034 Cannot convert 'AnsiString' to 'char'

Почему? Ведь temp.str[col] - AnsiString присваиваю тоже AnsiString, так зачем мне char.
Причем в обработке кнопки в условии s2[1]=='-' прекрасно работает. Т.е. в классе почему-то не воспринимается temp.str[col] как AnsiString? Или в классе нельзя объявлять переменную этого класса? Тогда нужно вынести за класс? Но тогда будет жаловаться, что не знает, что такое kol, str[kol];

Добавлено через 2 часа 0 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
class three_d {
int x, y, z; // трехмерные координаты
public:
three_d operator+(three_d op2); // op1 подразумевается
three_d operator=(three_d op2); // op1 подразумевается
three_d operator++ (); // op1 также подразумевается
void show();
void assign (int mx, int my, int mz);
};
// перегрузка +
three_d three_d::operator+(three_d op2)
{
three_d temp;
temp.x = x+op2.x; // целочисленное сложение
temp.у = y+op2.y; // и в данном случае + сохраняет
temp.z = z+op2.z; // первоначальное значение
return temp;
}
Если переопределение не в классе делать, как тут, то начинает жаловаться.
[C++ Error] Unit1.cpp(30): E2451 Undefined symbol 'kol'

Добавлено через 18 минут
temp.str[col]=char(t);
Как он и просил, заменил на char. Компилируется, но работает или нет, пока не знаю. Я так понимаю, что проблема в том, что нельзя одному симоволу строки присвоить другую строку, даже если она из одного символа?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 08:14
Ответы с готовыми решениями:

Перенаправление указателя при перегрузке оператора в variadic template
Есть вот такой вот код (сделан в vs2014): #include &quot;stdafx.h&quot; #include...

Почему при переопределении виртуального метода в производном классе выводится метод базового?
Всем добра! Помогите разобраться почему при переопределении виртуального...

Ошибка при переопределении операторов
Есть класс квадратной матрицы: class Matrix { private: int n; int...

Ошибка "различные базовые типы" при переопределении класса
Здравствуйте, возникает ошибка при компиляции ...

Ошибка в переопределении метода
у меня в классе ConcreteFactory наследуется интерфейс AbstractFactory. Почему в...

1
BRcr
4016 / 2306 / 291
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 10
16.03.2014, 10:32 2
System.AnsiStringBase.operator []
char __fastcall operator [](const int idx) const
char& __fastcall operator [](const int idx)
Description
Returns the character at a specified index in the string.
This operator [] returns the byte in the string at index value idx. The operator [] assumes a base index of 1.
Note: If the string contains multi-byte characters, the operator [] may return a byte value that represents the wrong character and/or a partial character. For character-level access, use the SubString method.
System.UnicodeString.operator []
WideChar __fastcall operator [](const int idx) const
WideChar& __fastcall operator [](const int idx)
Description
Returns the character at a specified index in the string.
operator [] returns the character in the string at the character index value idx. The operator [] assumes a base index of 1.
Здесь тебе нужно усвоить три основных момента:
- первое - если что-то непонятно, первым делом смотрим справку;
- второе - если в AnsiString будут русские буквы, оператор доступа к символам может работать некорректно. В этом случае либо использовать комбинацию методов SubString(), Delete() и Insert() для оперирования содержимым строки, либо использовать UnicodeString или WideString, где все толком работает с русским языком, либо создать временную копию строки в виде обычного массива и работать с ним, как обычно;
- и последнее - operator [] возвращает ссылку на char, следовательно присваивать ему можно лишь тип char или тип, который можно привести к char, например int. Тип AnsiString - это класс и привести его к char невозможно, о чем тебе компилятор прямым текстом и сообщил - " [C++ Error] Unit1.cpp(33): E2034 Cannot convert 'AnsiString' to 'char' ".
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 10:32

Ошибка в переопределении QObject
Все написал класс который наследуется от QObject. Вот если кратко: class RS...

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B?
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот...

Странное поведение при переопределении operator++
Всем привет! Изучая переопределения в С++ наткнулся на следующую непонятку:...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru