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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 801
#1

Как сделать преобразование в string для своего класса - C++

23.07.2014, 14:44. Просмотров 564. Ответов 18
Метки нет (Все метки)

есть 2 строчки кода

C++
1
2
Var a = "dfsfdfd";
string b = (string)a;
в класса есть перегруженный оператор operator string ();
но компилятор на него не реагирует и тупо не хочет компилировать, сразу пишет ошибку, почему и как сдела чтобы работало?

C++ (Qt)
1
Ошибка  12  error C2440: приведение типов: невозможно преобразовать "Var" в "std::string"   c:\users\admin\documents\visual studio 2012\projects\var\var\main.cpp   7   1   var
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2014, 14:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать преобразование в string для своего класса (C++):

Как перегрузить оператор для своего класса? - C++
У меня есть класс, .h class Vertex { public: ~Vertex(); Vertex(); double GetX(); double GetY(); double GetZ(); void...

Использование своего объекта своего класса внутри другого - C++
Здравствуйте. Есть класс для работы с матрицами. Все работает. Теперь нужно создать другой класс, где полями будут являться переменные -...

Переопределение оператора () для своего класса - C++
У меня вопрос. Как переопределить оператор () для своего класса?Если можно,приведите пример.

Итератор для своего контейнерного класса-списка - C++
Здравствуйте. Есть класс List, и мне надо помимо стандартных методов приделать к нему итератор. #include <cstdlib> #include...

Использование универсальной инициализации для объектов своего класса - C++
Здравствуйте! Все мы знаем, что поля структуры мы можем красиво инициализировать через {...}. Тогда мы std::vector структур можем...

Общие символы для двух строк(своего класса) через перегрузку оператора - C++
Создать свой строковый класс, добавить функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух...

18
Ilot
Модератор
Эксперт С++
1820 / 1178 / 232
Регистрация: 16.05.2013
Сообщений: 3,115
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 14:51 #2
Так может кодом поделитесь?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.07.2014, 14:54 #3
Цитата Сообщение от mh-coder Посмотреть сообщение
в класса есть перегруженный оператор operator string ();
Первое предположение: он не в public секции.
А вообще: лучше сделать метод to_string() для класса.
0
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 801
23.07.2014, 14:55  [ТС] #4
Цитата Сообщение от Ilot Посмотреть сообщение
Так может кодом поделитесь?
Я не думаю что проблема в коде класса, ну если хотите то вот
http://mh-proxy.ru/download/kod.txt
0
Avazart
Эксперт С++
7213 / 5385 / 286
Регистрация: 10.12.2010
Сообщений: 23,798
Записей в блоге: 17
23.07.2014, 15:00 #5
C++
1
Var::operator string ()
А чего оператор ничего не возвращает ?
0
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 801
23.07.2014, 15:06  [ТС] #6
Цитата Сообщение от Avazart Посмотреть сообщение
А чего оператор ничего не возвращает ?
потому что

C++ (Qt)
1
Ошибка  1   error C2549: в пользовательском преобразовании нельзя указывать возвращаемый тип    c:\users\admin\documents\visual studio 2012\projects\var\var\var.h  123 1   var
0
Aloir
218 / 218 / 13
Регистрация: 17.12.2010
Сообщений: 690
23.07.2014, 15:12 #7
mh-coder,
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class test
{
public:
    operator string() const
    {
        return _T("Hello world");
    }
};
 
int _tmain(int argc, _TCHAR* argv[])
{   
    test tmp;
    auto ss = (string)tmp;
    cout << ss;
    system("pause");
    return 0;
}
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.07.2014, 15:23 #8
Вероятно, как-то так должно работать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Var::operator string ()
{
    string ttemp;
    if(this->num !=INT_MIN){
        ttemp = to_string(static_cast<long long>(this->num));
    }else if(this->dnum !=DBL_MIN){
        ttemp = to_string(static_cast<long double>(this->dnum));
    }else{
        wchar_t * temp = (wchar_t*)this->str.c_str();
        char ch[4];
        for (int i = 0; i < this->str.length(); i++)
        {
            wcstombs(ch,&temp[i],1);
            ttemp += ch[0];
        }
    }
    return ttemp;
}
А вообще, конечно, код - говно редкостное.
0
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 801
23.07.2014, 15:24  [ТС] #9
Tulosba, разници никакой, можно код вобще закоментировать и результат будет тотже
0
Ilot
Модератор
Эксперт С++
1820 / 1178 / 232
Регистрация: 16.05.2013
Сообщений: 3,115
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 15:27 #10
Цитата Сообщение от Avazart Посмотреть сообщение
А чего оператор ничего не возвращает ?
Потому как тыц
mh-coder, скорее всего проблема в том, что компилятор не может определиться с выбором функции
C++
1
2
    operator string ();
    operator char* ();
Оба этих оператора могут использоваться для приведения к string. А вот вам и пример:
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
#include <iostream>
#include <string>
using namespace std;
class test
{
public:
    operator string()
    {
        return "Hello world";
    }
    operator char* ()
    {
        return "Hello world";
    }
};
 
int main(int argc, char* argv[])
{
    test tmp;
    auto ss = (string)tmp;
    cout << ss;
    system("pause");
    return 0;
}
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.07.2014, 15:34 #11
Цитата Сообщение от mh-coder Посмотреть сообщение
разници никакой,
Ну в 2010 студии собралось например, после некоторых танцев с бубеном. К тому же в исходном коде ошибка с delete[] имеет место быть. Вы под какой средой собираете?
0
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 801
23.07.2014, 15:45  [ТС] #12
Цитата Сообщение от Ilot Посмотреть сообщение
Оба этих оператора могут использоваться для приведения к string. А вот вам и пример:
мм, тоесть перегрузка оператора string можно вытирать и никак тут не исправишь, я правильно понял?

Цитата Сообщение от Tulosba Посмотреть сообщение
А вообще, конечно, код - говно редкостное.
почему?

Добавлено через 7 минут
Tulosba, я собираю в VS2012, а где там ошибка с delete[]?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.07.2014, 15:57 #13
Цитата Сообщение от mh-coder Посмотреть сообщение
почему?
Да хотя бы потому что из разряда "всё-в-одном". Я понимаю, конечно, вариантный тип, но зачем туда ещё и дату припахали, не ясно.
Цитата Сообщение от mh-coder Посмотреть сообщение
а где там ошибка с delete[]?
C++
1
delete[]temp;
в operator string. Сравните с тем, что я привел в сообщении #8 например.
0
Avazart
23.07.2014, 16:06
  #14

Не по теме:

Ilot, mh-coder, А ну да в принципе, не доводилось еще использовать перегрузку такого оператора, да и в книгах не рекомендуют.

0
mh-coder
-4 / 26 / 3
Регистрация: 01.02.2014
Сообщений: 801
23.07.2014, 16:09  [ТС] #15
ок, лан, еще вопрос, что и где мне нужно дописать чтобы я мог пеедавать в функции переменные с const?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2014, 16:09
Привет! Вот еще темы с ответами:

Создать шаблонную очередь и инстанцировать её для своего класса, представляющего строку на базе vector<char> - C++
Была задача создать шаблонную очередь (я это сделал) и инстанцировать её для своего класса, представляющего строку, изготовленную из...

перегрузка == для класса string - C++
можно ли для существующего класса string перегрузить оператор не вмешиваясь в библиотеку? ни разу не сталкивался. Error: стринг не...

Функция ввода для класса string - C++
Я вот решил написать свою версию класса string. Просто для себя, чтобы понять как оно работает. Но застрял на одной функции, а именно ввода...

Реализовать оператор [] для класса String - C++
Однако на этот раз оператор должен реализовывать нестандартное поведение: оператор нужно реализовать таким образом, чтобы для объекта str...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
23.07.2014, 16:09
Ответ Создать тему
Опции темы

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