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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
#1

Ошибка "Выражение должно представлять класс, структуру или объединение" - C++

16.01.2013, 18:09. Просмотров 1788. Ответов 2
Метки нет (Все метки)

clas_s

C++ (Qt)
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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
class Complex // класс компелексных чисел
{
public:
   double re, im; // целая и мнимая части
   
// создаем конструкторы   
public:
   
   Complex() {};
   
   Complex (double r) // конструктор по умолчанию
   {
      re = r; 
      im = 0;
   }
   
   Complex (double r, double i) // конструктор по умолчанию
   {
      re = r; 
      im = i;
   } 
   
   Complex (Complex &c) // конструктор копирования
   {
      re = c.re; 
      im = c.im;
   }
   
   ~Complex() {}
   
double abs() // Модуль комплексного числа
   {
      return sqrt(re * re - im * im);
   }     
 
   Complex & operator = (Complex &c) // перегрузка оператора присваивания
   {
      re = c.re;
      im = c.im;
 
      return (*this);
   }
 
   Complex Complex::operator + (Complex &c) // перегрузка оператора сложения
   {
      Complex temp;
 
      temp.re = re + c.re;
      temp.im = im + c.re;
 
      return temp;
   }
 
   Complex Complex::operator - (Complex &c) // перегрузка оператора вычитания
   {
      Complex temp;
 
      temp.re = re - c.re;
      temp.im = im - c.re;
    
      return temp;
   }
 
   Complex Complex::operator * (Complex &c) // перегрузка оператора умножения
   {
      Complex temp;
 
      temp.re = re*c.re;
      temp.im = re*c.im;
 
      return temp;
   }
 
   Complex Complex::operator / (Complex &c) // перегрузка оператора деления
   {
      Complex temp;
 
      double r = c.re * c.re + c.im * c.im;
      temp.re = (re * c.re + im * c.im) / r;
      temp.re = (im * c.re - re * c.im) / r;
 
      return temp;
   }   
 
   friend ostream &operator<<(ostream &, Complex &); // перегрузка оператора <<
   friend istream &operator>>(istream &, Complex &); // перегрузка оператора >>
 
};
 
ostream &operator<<(ostream &out, Complex &c)
{
   out << "(" << c.re << ") + I (" << c.im << "\n";
   
   return out;
}
 
istream &operator>>(istream &in, Complex &c)
{
   in >> c.re >> c.im;
   
   return in;
}
main.cpp

C++ (Qt)
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
134
#include "clas_s.h"
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
class complexExt: public Complex
    {
    public:
        complexExt () {};   // Конструктор по умолчанию
        complexExt (double r): Complex(r) {} // Конструктор
        complexExt (double r, double i): Complex(r, i) {}    // Конструктор
        complexExt (complexExt& c): Complex((Complex&)c) {}    // Конструктор
        ~ complexExt () {}  // Деструктор
    double abs()   // Модуль комплексного числа
            {
            return sqrt(re * re - im * im);
            }
 
        complexExt operator+(complexExt &);    // Перегрузка оператора сложения
        complexExt operator-(complexExt &);    // Перегрузка оператора вычитания
        complexExt operator*(complexExt &);    // Перегрузка оператора умножения
        complexExt operator/(complexExt &);    // Перегрузка оператора деления
 
        // Перегрузка функции-оператора << для вывода класса complexExt
        friend ostream &operator<<(ostream &, complexExt &);
 
        // Перегрузка функции-оператора >> для ввода класса complexExt
        friend istream &operator>>(istream &, complexExt &);
    };
 
// Перегрузка +
complexExt complexExt::operator+( complexExt &fp1)
    {
    fp1.re = re + fp1.re;
    fp1.im = im + fp1.im;
    return fp1;
    }
 
// Перегрузка -
complexExt complexExt::operator-( complexExt &fp1)
    {
    fp1.re = re - fp1.re;
    fp1.im = im - fp1.im;
    return fp1;
    }
 
// Перегрузка *
complexExt complexExt::operator*( complexExt &fp1)
    {
    double i, j;
    i = re * fp1.re - im * fp1.im;
    j = re* fp1.im + fp1.re * im;
    fp1.re = i;
    fp1.im = j;
    return fp1;
    }
 
// Перегрузка /
complexExt complexExt::operator/( complexExt &fp1)
    {
    double k, i, j;
    k = fp1.re * fp1.re + fp1.im * fp1.im;
    i = (re * fp1.re + im * fp1.im) / k;
    j = (fp1.re * im- re * fp1.im) / k;
    fp1.re = i;
    fp1.im = j;
    return fp1;
    }
 
 
 
 
// Перегрузка оператора <<
void print(complexExt &fp)
{
    
 
 printf("mod(cos(%f) + I*sin(%f)\n", fp.re, c.im);
 
}
 
ostream &operator<< (ostream &fo, complexExt &fp)
{
    if (fp.im < 0) fo << "mod(cos("<<fp.re << ") +i*sin(" << fp.im << ")\n";
    else fo << "mod(cos("<< fp.re << "+i*sin(" << fp.im << ")\n";
 
    return fo;
    }
 
 
 
 
// Перегрузка оператора >>
istream &operator>>(istream &fi, complexExt &fp)
    {
    cout << "Vvedite deistvitelnyu  chast: ";
    fi >> fp.re;
    cout << "Vvedite mnimyu chast: ";
    fi >> fp.im;
    return fi;
    }
 
 
int main()
{
    
 
    // Комплексные числа
    complexExt c1, c2, c3, c4, c5;
 
    // Ввод комплексных чисел
    cin >> c1;
    cin >> c2;
    cin >> c3;
    cin >> c4;
    cin >> c5;
 
    // Вывод комплексных чисел
    cout << "\nc1 = " << c1;
    cout << "c2 = " << c2;
    cout << "c3 = " << c3;
    cout << "c4 = " << c4;
    cout << "c5 = " << c5 << '\n';
 
    cout << "Modul c1: " << c1.abs() << "\n\n";
 
    // Вывод результатов операций
 
    getch();
 
system("pause");
    
}
ошибка


1>c:\users\1\documents\visual studio 2010\projects\123456789\123456789\main.cpp(79): error C2065: c: необъявленный идентификатор
1>c:\users\1\documents\visual studio 2010\projects\123456789\123456789\main.cpp(79): error C2228: выражение слева от ".im" должно представлять класс, структуру или объединение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2013, 18:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка "Выражение должно представлять класс, структуру или объединение" (C++):

выражение слева от ".name" должно представлять класс, структуру или объединение (Парочка ошибок) - C++
в новой версии ms работает, но в ms 2010 нет. for(auto sound : mySounds) { float screen = {}; float size = 10.0f *...

Исправить ошибку error C2228:выражение слева от ".leght" должно представлять класс, структуру или объединение - C++
Помогите исправить ошибку 1&gt;c:\users\maksimus\documents\visual studio 2013\projects\consoleapplication23\consoleapplication23\исходный...

Выражение должно представлять класс,структуру или объединение,идентификатор не найден - C++
Здравствуйте! Никак не могу справиться с программой,выдаёт ошибки. Задание: составить программу, осуществляющую ввод и обработку массива...

Ошибка:выражение должно представлять собой указатель на полный тип объекта - C++
Доброго времени суток! Простенький код, но не получается. using namespace std; #include&lt;iostream&gt; int main() { int c1; ...

Ошибка "выражение должно быть допустимым для изменения левосторонним значением" - C++
В файле, путь к которому вводится с экрана, находится массив. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; ...

Ошибка в программе дешифрования: "выражение должно иметь тип указателя на объект" - C++
Возникают ошибки : 5 IntelliSense: выражение должно иметь тип указателя на объект c:\Users\Maks\Documents\Visual Studio...

2
ArmanPrestige
Pied Piper
232 / 223 / 51
Регистрация: 15.01.2013
Сообщений: 855
Завершенные тесты: 1
16.01.2013, 18:25 #2
C++
1
2
3
4
5
6
7
8
// Перегрузка оператора <<
void print(complexExt &fp)
{
    
 
 printf("mod(cos(%f) + I*sin(%f)\n", fp.re, c.im);
 
}
забавно конечно)) однако не верно. сравниете перегрузку вашего оператора << и >>. думаю поймете. а если нет то вот вам пример который я вам уже давал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A{
    int varFirst;
    double varSecond;
    /* ....
       ....
       */
public:
    friend istream& operator >> (istream& in, A& T);
    /* ....
       ....
       */
};
 
 
istream& operator >> (istream& in, A& T){
    cout << "enter var first: "; in >> T.varFirst;
    cout << "enter var second:"; in >> T.varSecond;
    return in;
}
по аналогии с этим делается и оператор << . только поменять поток с istream на ostream ну и по мелочи еще.
0
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 18:48  [ТС] #3
в принципе, эту строку можно и убрать, программа начнет работать

C++ (Qt)
1
2
3
4
5
6
7
8
// Перегрузка оператора <<
void print(complexExt &fp)
{
    
 
 printf("mod(cos(%f) + I*sin(%f)\n", fp.re, c.im);
 
}
но мне нужно, чтобы результат программы был примерно такой

c1 = mod(cos(9)+i*sin(8)
c2 = mod(cos(7)+i*sin(6)
c3 = mod(cos(5)+i*sin(4)
c4 = mod(cos(3)+i*sin(2)
c5 = mod(cos(1)+i*sin(2)

Модуль c1: 4.123106

c1 + c2 = 16+i14
c1 - c3 = 4+i4
c1 * c4 = 11+i42
c1 / c5 = 5+i(-2)

а получается такой

Введите действительную часть: 9
Введите мнимую часть: 8
Введите действительную часть: 7
Введите мнимую часть: 6
Введите действительную часть: 5
Введите мнимую часть: 4
Введите действительную часть: 3
Введите мнимую часть: 2
Введите действительную часть: 1
Введите мнимую часть: 2

c1 = mod(cos(9)+i*sin(8)
c2 = mod(cos(7)+i*sin(6)
c3 = mod(cos(5)+i*sin(4)
c4 = mod(cos(3)+i*sin(2)
c5 = mod(cos(1)+i*sin(2)

Модуль c1: 4.123106

c1 + с2 = mod(cos(9)+i*sin(8)
c1 - с3 = mod(cos(7)+i*sin(6)
c1 * c4 = mod(cos(5)+i*sin(4)
c1 / c5 = mod(cos(3)+i*sin(2)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2013, 18:48
Привет! Вот еще темы с ответами:

Ошибка: "Выражение должно быть допустимым для изменения левосторонним значением" - C++
struct statistica{ char name; double number1; // Номер счета double number2; // Приход double number3; // Расход char...

"Выражение должно быть допустимым для изменения левосторонним значением" - C++
#include &lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt; #include&lt;fstream&gt; using namespace std; struct knigi { char name; ...

Найти причины ошибки "This - выражение должно иметь тип класса" - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class X { int *i; // Будущие объекты -...

Выдает ошибку "выражение должно быть допустимым левосторонним значением" - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { int f; int x; int b,a,c; cout &lt;&lt; &quot;Введите...


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

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

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