32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
1

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

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

Author24 — интернет-сервис помощи студентам
есть 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2014, 14:44
Ответы с готовыми решениями:

Явное преобразование своего класса в int
Всем привет! Есть такой класс: public class Address { private int _Field; ...

Создание своего Event для своего класса
как создать событие для своего класса? У C# нужно создать свое делегат, потом создать экземпляр...

Как использовать stl для своего класса(для пользовательского типа данных)
Мне бы пример какой-нибудь а то в инете ищу ничего не могу найти, кроме базовых типов данных

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

18
Эксперт по математике/физикеЭксперт С++
2044 / 1363 / 393
Регистрация: 16.05.2013
Сообщений: 3,498
Записей в блоге: 6
23.07.2014, 14:51 2
Так может кодом поделитесь?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.07.2014, 14:54 3
Цитата Сообщение от mh-coder Посмотреть сообщение
в класса есть перегруженный оператор operator string ();
Первое предположение: он не в public секции.
А вообще: лучше сделать метод to_string() для класса.
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
23.07.2014, 14:55  [ТС] 4
Цитата Сообщение от Ilot Посмотреть сообщение
Так может кодом поделитесь?
Я не думаю что проблема в коде класса, ну если хотите то вот
http://mh-proxy.ru/download/kod.txt
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.07.2014, 15:00 5
C++
1
Var::operator string ()
А чего оператор ничего не возвращает ?
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
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
224 / 224 / 38
Регистрация: 17.12.2010
Сообщений: 713
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
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
23.07.2014, 15:24  [ТС] 9
Tulosba, разници никакой, можно код вобще закоментировать и результат будет тотже
0
Эксперт по математике/физикеЭксперт С++
2044 / 1363 / 393
Регистрация: 16.05.2013
Сообщений: 3,498
Записей в блоге: 6
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
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.07.2014, 15:34 11
Цитата Сообщение от mh-coder Посмотреть сообщение
разници никакой,
Ну в 2010 студии собралось например, после некоторых танцев с бубеном. К тому же в исходном коде ошибка с delete[] имеет место быть. Вы под какой средой собираете?
0
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
23.07.2014, 15:45  [ТС] 12
Цитата Сообщение от Ilot Посмотреть сообщение
Оба этих оператора могут использоваться для приведения к string. А вот вам и пример:
мм, тоесть перегрузка оператора string можно вытирать и никак тут не исправишь, я правильно понял?

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

Добавлено через 7 минут
Tulosba, я собираю в VS2012, а где там ошибка с delete[]?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
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
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
23.07.2014, 16:09  [ТС] 15
ок, лан, еще вопрос, что и где мне нужно дописать чтобы я мог пеедавать в функции переменные с const?
0
Эксперт по математике/физикеЭксперт С++
2044 / 1363 / 393
Регистрация: 16.05.2013
Сообщений: 3,498
Записей в блоге: 6
23.07.2014, 16:13 16
Лучший ответ Сообщение было отмечено mh-coder как решение

Решение

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) ===|
2
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
23.07.2014, 18:00 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();
}
1
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
24.07.2014, 17:14  [ТС] 18
еще вопрос, что и где мне нужно дописать чтобы я мог пеедавать в функции переменные с const?
0
8 / 8 / 0
Регистрация: 08.01.2013
Сообщений: 85
24.07.2014, 17:18 19
Цитата Сообщение от mh-coder Посмотреть сообщение
переменные с const?
C++
1
2
3
4
5
class Var {
void method(const Var& other) const {
 
}
};
1
24.07.2014, 17:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.07.2014, 17:18
Помогаю со студенческими работами здесь

Как отловить событие для своего класса?
класс: TSomeClass = class(TObject) procedure OnKeyDown(var Message); message WM_KEYDOWN; end;...

Как это сделать без класса string ?
В заданной строке вставить перед каждым восклицательным знаком запятую. Можно ли это переделать...

Как создать свое событие для своего класса?
Добрый день всем! Подскажите как создать событие для своего класса? Экземпляр класса должен...

Как установить свойство по умолчанию для своего класса
Как установить свойство по умолчанию для своего класса


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru