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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
yulla
0 / 0 / 0
Регистрация: 11.12.2012
Сообщений: 59
16.01.2013, 18:09     ошибка "выражение должно представлять класс, структуру или объединение" #1
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" должно представлять класс, структуру или объединение
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2013, 18:09     ошибка "выражение должно представлять класс, структуру или объединение"
Посмотрите здесь:

C++ Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*".
Ошибка "Access violation..." при попытке отсортировать структуру из файла быстрым методом C++
Написать программу, которая запрашивает у пользователя номер дня недели и выводит одно из сообщений: "Рабочий день","Суббота" или "Воскресенье" C++
C++ если не составит труда(при вводе "n" должно создаваться предложение "Мне n год (года)")
Описать класс "множество", позволяющий выполнять основные операции - добавления и удаление элемента, пересечение, множеств, объединение и разность мно C++
C++ Класс "Графический объект", от которого будут наследоваться классы "круг" и "квадрат"
выражение слева от ".name" должно представлять класс, структуру или объединение (Парочка ошибок) C++
C++ Исправить ошибку error C2228:выражение слева от ".leght" должно представлять класс, структуру или объединение

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ArmanPrestige
 Аватар для ArmanPrestige
219 / 210 / 50
Регистрация: 15.01.2013
Сообщений: 787
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 ну и по мелочи еще.
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)
Yandex
Объявления
16.01.2013, 18:48     ошибка "выражение должно представлять класс, структуру или объединение"
Ответ Создать тему
Опции темы

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