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

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

Восстановить пароль Регистрация
 
Aziikus
 Аватар для Aziikus
0 / 0 / 0
Регистрация: 02.06.2013
Сообщений: 27
02.06.2013, 20:52     Преобразование типов. Не конструктор не видит класс #1
Здравствуйте. В коде ниже, я хотел реализовать конвертер длин. Я создал 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) ===|

Заранее благодарен!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 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);
...
Aziikus
 Аватар для 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) выходят те же ошибки.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.06.2013, 15:50     Преобразование типов. Не конструктор не видит класс #4
Цитата Сообщение от Aziikus Посмотреть сообщение
Все что не входит в if
Вы хоть укажите, где это в коде...
Aziikus
 Аватар для 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;
}
alsav22
03.06.2013, 18:26     Преобразование типов. Не конструктор не видит класс
  #6

Не по теме:

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

Yandex
Объявления
03.06.2013, 18:26     Преобразование типов. Не конструктор не видит класс
Ответ Создать тему
Опции темы

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