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

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

Войти
Регистрация
Восстановить пароль
 
Aziikus
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 27
#1

Преобразование типов. Не конструктор не видит класс - C++

02.06.2013, 20:52. Просмотров 410. Ответов 5
Метки нет (Все метки)

Здравствуйте. В коде ниже, я хотел реализовать конвертер длин. Я создал 2 класса и при помощи 2 конструкторов хотел решить проблему преобразования типов. Если оставить один конструктор, то все работает, а с двумя выводит ошибку. Я начинающий и не могу додуматься как её можно исправить. Помогите решить эту проблему.

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
#include <iostream>
#include<locale.h>
using namespace std;
int vibor;
void menu();
class Metrik
{
private:
    float zn1;
public:
    Metrik():zn1(0) // конструктор без аргументов
    {}
    Metrik(Amerik);
    Metrik(float z):zn1(z)// конструктор с аргументами для передачи в них данных
    {}
    float izprivata1(){return zn1;}
    void display()
    {
        cout<<"Переведенное значение равно:  "<<zn1;
    }
};
 
 class Amerik
{
private:
    float zn2;
public:
    Amerik():zn2(0)
    {}
    Amerik(Metrik);
    Amerik(float z):zn2(z)
    {}
    void display()
    {
        cout<<"Переведенное значение равно:  "<<zn2;
    }
    float izprivata2(){return zn2;}
 
};
 
Metrik::Metrik (Amerik perevod2)
{
switch(vibor)
{
    case 74:
        {
        zn1= perevod2.izprivata2()*0.9144;
        } break;
    case 75:
        {
        zn1= perevod2.izprivata2()*0.0009144;
        } break;
    case 84:
        {
            zn1= perevod2.izprivata2()*1609;
        } break;
    case 85:
        {
            zn1= perevod2.izprivata2()*1.609;
        } break;
    }
}
 
 
 
Amerik::Amerik(Metrik perevod1)
{ switch(vibor)
{
case 47:
    {
        zn2= perevod1.izprivata1()*1.0936;
    } break;
case 48:
    {
    zn2= perevod1.izprivata1()*0.0006214;
    } break;
case 57:
    {
    zn2= perevod1.izprivata1()*1094;
    } break;
case 58:
    {
    zn2= perevod1.izprivata1()*0.6214;
    } break;
 
}
 
}
 
 
int main()
{ setlocale(LC_ALL,"RUS");
int a;
int n=1;
while(n!=0) {
 menu();
 cin>>vibor;
 cout<<"Введите значение для перевода: ";
 cin>>a;
 if (vibor==47||48||57||58)
 {
     Metrik perevod1(a);
 Amerik perevod2=perevod1;
 perevod2.display();
 }
 else
 {
     Amerik perevod2(a);
     Metrik perevod1=perevod2;
     perevod1.display();
 }
 cout<<"\nЕсли хотите звново конверитировать данные нажмите 1, если хотите выйти из программы, нажмите 0"<<endl;
 cin>>n;
}
exit(0);
}
void menu()
{
    cout<<"Здравствуйте. Вас приветствует конвертер длин."<<endl
            <<"Чтобы начать работу выберите из какой величины в какую вы будете конвертировать данные:"<<endl
            <<"1. Миллиметры."<<endl
            <<"2. Сантиметры."<<endl
            <<"3. Децеметры."<<endl
            <<"4. Метры."<<endl
            <<"5. Километры."<<endl
            <<"6. Дюймы."<<endl
            <<"7. Ярды."<<endl
            <<"8. Мили."<<endl
            <<"Пример: Вы хотите перевести миллиметры в ярды, для этого нужно ввести число 17. Где, 1 - это величина которую вы переводите, 7 -
 
величина в которую конвентируется величина 1. Далее можно вводить велечину."<<endl;
}
Ошибки:
Кликните здесь для просмотра всего текста
||=== фыфыф, Debug ===|
D:\Documents\Documents\фыфыф\main.cpp|14|error: field `Amerik' has incomplete type|
D:\Documents\Documents\фыфыф\main.cpp|43|error: prototype for `Metrik::Metrik(Amerik)' does not match any in class `Metrik'|
D:\Documents\Documents\фыфыф\main.cpp|8|error: candidates are: Metrik::Metrik(const Metrik&)|
D:\Documents\Documents\фыфыф\main.cpp|15|error: Metrik::Metrik(float)|
D:\Documents\Documents\фыфыф\main.cpp|12|error: Metrik::Metrik()|
D:\Documents\Documents\фыфыф\main.cpp||In function `int main()':|
D:\Documents\Documents\фыфыф\main.cpp|110|error: conversion from `Amerik' to non-scalar type `Metrik' requested|
D:\Documents\Documents\фыфыф\main.cpp||In function `void menu()':|
D:\Documents\Documents\фыфыф\main.cpp|130|error: missing terminating " character|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\226' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\229' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\235' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\232' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\247' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\232' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\237' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\224' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\226' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\234' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\238' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\242' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\238' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\240' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\243' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\254' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\234' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\238' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\237' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\226' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\229' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\237' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\242' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\232' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\240' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\243' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\229' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\242' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\241' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\255' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\226' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\229' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\235' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\232' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\247' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\232' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\237' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\224' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\196' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\224' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\235' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\229' in program|
D:\Documents\Documents\фыфыф\main.cpp|132|error: stray '\229' in program|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build finished: 50 errors, 0 warnings (0 minutes, 0 seconds) ===|

Заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2013, 20:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование типов. Не конструктор не видит класс (C++):

Преобразование типов. Дружественніе функции. Конструктор копирования - C++
Напишите пожалуста 3 программы ато завал нада здать ( 1 Задача: Создать класс вещественных чисел Double. Пределить перегруженную функцию,...

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

преобразование типов (класс вектор) C++ - C++
Доброй ночи ув. форумчане. Пожалуйста помогите сделать преобразования типов, пытался что-то навоять, прочитал немало материала по этой...

Один класс не видит другой. Преобразование класса - C++
Всем доброго времени суток. В общем вот есть такой код: #include &lt;cmath&gt; using namespace std; class Decart; class Polar { ...

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования - C++
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

5
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.06.2013, 21:37 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
...
class Amerik;
 
class Metrik
{
private:
    float zn1;
public:
    Metrik():zn1(0) // конструктор без аргументов
    {}
    Metrik(Amerik);
...
1
Aziikus
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 27
03.06.2013, 15:32  [ТС] #3
Я сделал как вы сказали, скомпилировалось, но возникла другая проблема. Все что не входит в if оно как то странным образом переводит в одно и то же значение равное: 8,12753e-044. Может кто нибудь знает почему так ?
Ps: если добавить указатель для : Metrik::Metrik (Amerik perevod2) и сделать вот так: Metrik::Metrik (Amerik *perevod2) выходят те же ошибки.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2013, 15:50 #4
Цитата Сообщение от Aziikus Посмотреть сообщение
Все что не входит в if
Вы хоть укажите, где это в коде...
0
Aziikus
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 27
03.06.2013, 17:42  [ТС] #5
Проблему решил. Спасибо что откликнулись. If в коде один и он находится в main. Левые значения выводились, как я понял, из за того что zn1 либо zn2 не использовались и из за ошибки в условии, метод void display() выводил на экран и значение zn1 первого класса и zn2 второго класса.
Кому интересно вот рабочий код:

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
#include <iostream>
#include<locale.h>
using namespace std;
int vibor;
void menu();
class Amerik;
class Metrik
{
private:
    float zn1;
public:
    Metrik():zn1(0) // конструктор без аргументов
    {}
    Metrik(Amerik);
    Metrik(float z):zn1(z)// конструктор с аргументами для передачи в них данных
    {}
    float izprivata1(){return zn1;}
    void display1()
    {
        cout<<"[1]Переведенное значение равно:  "<<zn1;
    }
};
 
 class Amerik
{
private:
    float zn2;
public:
    Amerik():zn2(0)
    {}
    Amerik(Metrik);
    Amerik(float z):zn2(z)
    {}
    void display2()
    {
        cout<<"[2]Переведенное значение равно:  "<<zn2;
    }
    float izprivata2(){return zn2;}
 
};
Amerik::Amerik(Metrik perevod1)
{ switch(vibor)
{
case 47:
    {
        zn2= perevod1.izprivata1()*1.0936;
    } break;
case 48:
    {
    zn2= perevod1.izprivata1()*0.0006214;
    } break;
case 57:
    {
    zn2= perevod1.izprivata1()*1094;
    } break;
case 58:
    {
    zn2= perevod1.izprivata1()*0.6214;
    } break;
 
}
 
}
 
Metrik::Metrik (Amerik perevod2)
{
switch(vibor)
{
    case 74:
        {
        zn1= perevod2.izprivata2()*0.9144;
        } break;
    case 75:
        {
        zn1= perevod2.izprivata2()*0.0009144;
        } break;
    case 84:
        {
            zn1= perevod2.izprivata2()*1609;
        } break;
    case 85:
        {
            zn1= perevod2.izprivata2()*1.609;
        } break;
    }
}
 
 
 
 
 
 
int main()
{ setlocale(LC_ALL,"RUS");
int a;
int n=1;
while(n!=0) {
 menu();
 cin>>vibor;
 cout<<"Введите значение для перевода: ";
 cin>>a;
 if (vibor==47|| vibor==48||vibor==57||vibor==58) // тут была ошибка из за которой запускался void display() два раза
 {                                                                   // для первого класса и для второго класса. 
     Metrik perevod1(a);                                      // Пришлось делать другое условие.
 Amerik perevod2=perevod1;
 perevod2.display2();
 }
if (vibor==74||vibor==84||vibor==75||vibor==85)
 {
     Amerik perevod2(a);
     Metrik perevod1=perevod2;
     perevod1.display1();
 }
 cout<<"\nЕсли хотите звново конверитировать данные нажмите 1, если хотите выйти из программы, нажмите 0"<<endl;
 cin>>n;
 system("cls");
}
exit(0);
}
void menu()
{
    cout<<"Здравствуйте. Вас приветствует конвертер длин."<<endl
            <<"Чтобы начать работу выберите из какой величины в какую вы будете конвертировать данные:"<<endl
            <<"1. Миллиметры."<<endl
            <<"2. Сантиметры."<<endl
            <<"3. Децеметры."<<endl
            <<"4. Метры."<<endl
            <<"5. Километры."<<endl
            <<"6. Дюймы."<<endl
            <<"7. Ярды."<<endl
            <<"8. Мили."<<endl
            <<"Пример: Вы хотите перевести миллиметры в ярды, для этого нужно ввести число 17. Где, 1 - это величина которую вы переводите, 7 - величина в которую конвентируется величина 1. Далее можно вводить велечину."<<endl;
}
0
alsav22
03.06.2013, 18:26     Преобразование типов. Не конструктор не видит класс
  #6

Не по теме:

Цитата Сообщение от Aziikus Посмотреть сообщение
If в коде один и он находится в main.
Один или не один... Кому-то интересно искать?

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 18:26
Привет! Вот еще темы с ответами:

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор класса не видит конструктор по умолчанию другого класса - C++
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....

Почему конструктор вызывается повторно при преобразовании типов? - C++
В качестве примера предлагаю рассмотреть примерчик из учебника. В примере мы создаём класс, содержащий в качестве поля строку символов и...

Не видит конструктор - C++
Приветсвую всех! В общем у меня небольшая проблемка, с которой собственными силами разобраться не смог... Только начиню создавать класс...


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

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

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