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

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

Восстановить пароль Регистрация
 
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
23.07.2014, 14:44     Как сделать преобразование в string для своего класса #1
есть 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
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 14:51     Как сделать преобразование в string для своего класса #2
Так может кодом поделитесь?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.07.2014, 14:54     Как сделать преобразование в string для своего класса #3
Цитата Сообщение от mh-coder Посмотреть сообщение
в класса есть перегруженный оператор operator string ();
Первое предположение: он не в public секции.
А вообще: лучше сделать метод to_string() для класса.
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
23.07.2014, 14:55  [ТС]     Как сделать преобразование в string для своего класса #4
Цитата Сообщение от Ilot Посмотреть сообщение
Так может кодом поделитесь?
Я не думаю что проблема в коде класса, ну если хотите то вот
http://mh-proxy.ru/download/kod.txt
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,587
Записей в блоге: 17
23.07.2014, 15:00     Как сделать преобразование в string для своего класса #5
C++
1
Var::operator string ()
А чего оператор ничего не возвращает ?
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
23.07.2014, 15:06  [ТС]     Как сделать преобразование в string для своего класса #6
Цитата Сообщение от Avazart Посмотреть сообщение
А чего оператор ничего не возвращает ?
потому что

C++ (Qt)
1
Ошибка  1   error C2549: в пользовательском преобразовании нельзя указывать возвращаемый тип    c:\users\admin\documents\visual studio 2012\projects\var\var\var.h  123 1   var
Aloir
 Аватар для Aloir
216 / 216 / 13
Регистрация: 17.12.2010
Сообщений: 688
23.07.2014, 15:12     Как сделать преобразование в string для своего класса #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;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.07.2014, 15:23     Как сделать преобразование в string для своего класса #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;
}
А вообще, конечно, код - говно редкостное.
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
23.07.2014, 15:24  [ТС]     Как сделать преобразование в string для своего класса #9
Tulosba, разници никакой, можно код вобще закоментировать и результат будет тотже
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 15:27     Как сделать преобразование в string для своего класса #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;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
23.07.2014, 15:34     Как сделать преобразование в string для своего класса #11
Цитата Сообщение от mh-coder Посмотреть сообщение
разници никакой,
Ну в 2010 студии собралось например, после некоторых танцев с бубеном. К тому же в исходном коде ошибка с delete[] имеет место быть. Вы под какой средой собираете?
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
23.07.2014, 15:45  [ТС]     Как сделать преобразование в string для своего класса #12
Цитата Сообщение от Ilot Посмотреть сообщение
Оба этих оператора могут использоваться для приведения к string. А вот вам и пример:
мм, тоесть перегрузка оператора string можно вытирать и никак тут не исправишь, я правильно понял?

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

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

Не по теме:

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

mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
23.07.2014, 16:09  [ТС]     Как сделать преобразование в string для своего класса #15
ок, лан, еще вопрос, что и где мне нужно дописать чтобы я мог пеедавать в функции переменные с const?
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
23.07.2014, 16:13     Как сделать преобразование в string для своего класса #16
Сообщение было отмечено автором темы, экспертом или модератором как ответ
mh-coder, а я все-таки не поленился и откомпилил ваш код. Как и предполагалось ошибка - неоднозначность выбора конструктора для string:
C++
1
2
3
4
5
6
7
C:\Program Files\CodeBlocks\project\temp\main.cpp||In function 'int main(int, char**)':|
C:\Program Files\CodeBlocks\project\temp\main.cpp|2014|error: call of overloaded 'basic_string(Var&)' is ambiguous|
C:\Program Files\CodeBlocks\project\temp\main.cpp|2014|note: candidates are:|
C:\MinGWx86\i686-w64-mingw32\include\c++\bits\basic_string.h|512|note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(std::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]|
C:\MinGWx86\i686-w64-mingw32\include\c++\bits\basic_string.h|495|note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]|
C:\MinGWx86\i686-w64-mingw32\include\c++\bits\basic_string.h|460|note: std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]|
||=== Build finished: 1 errors, 15 warnings (0 minutes, 1 seconds) ===|
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
23.07.2014, 18:00     Как сделать преобразование в string для своего класса #17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Var {
private:
    string data;
public:
    Var(string data) {
        this->data = data;
    }
 
    operator string() const {
        return data;
    }
 
    operator const char*() const {
        return data.c_str();
    }
};
 
void main() {
    const Var var = "Some text";
    cout << var; // Вывод: Some text
 
    _getch();
}
mh-coder
24 / 23 / 2
Регистрация: 01.02.2014
Сообщений: 717
24.07.2014, 17:14  [ТС]     Как сделать преобразование в string для своего класса #18
еще вопрос, что и где мне нужно дописать чтобы я мог пеедавать в функции переменные с const?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2014, 17:18     Как сделать преобразование в string для своего класса
Еще ссылки по теме:

Как сделать членом класса экземпляр этого же класса C++
C++ Перегрузка оператора >> для пользовательского класса String
Как перегрузить оператор для своего класса? C++

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

Или воспользуйтесь поиском по форуму:
QGuest
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
24.07.2014, 17:18     Как сделать преобразование в string для своего класса #19
Цитата Сообщение от mh-coder Посмотреть сообщение
переменные с const?
C++
1
2
3
4
5
class Var {
void method(const Var& other) const {
 
}
};
Yandex
Объявления
24.07.2014, 17:18     Как сделать преобразование в string для своего класса
Ответ Создать тему
Опции темы

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