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

Дроби!классы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подсчитать количество таких элементов массива, для которых выполняется условие http://www.cyberforum.ru/cpp-beginners/thread436548.html
Заданы 2 массива А и В , каждый из которых содержит n элементов. Подсчитать количество таких k, для которых A>B.
C++ Преобразование в массив Здравствуйте. У меня вопрос. Есть например структура ST. Переменная V это **ST. После выполнения функции в ST массив структур. Вопрос: Как его использовать? struct ST { }*pST; pST* V; // Функция http://www.cyberforum.ru/cpp-beginners/thread436534.html
Роберт Седжвик, 2 том. C++
вечер добрый, есть ли в сети, и вообще, перевиден ли на русский язык, второй том книги Роберта Седжвика Фундаментальные алгоритмы на С++? Там главы про графы, строки, геометрия, и др.?
C++ Закрывается программа
Учу cpp. Переписал код с учебного задания, скомпилировал, нажал Build>Build solution, запустил. Программа запускается, но результат не выдает. Также пробовал пустую программу в одну строчку, не пишет "для продолжения нажмите любую клавищу" просто сразу закрывает, почему? вот код. #include <iostream> using namespace std; int main() { int a, b;
C++ CGraphView... Как с ним работать. http://www.cyberforum.ru/cpp-beginners/thread436507.html
Подскажите пожалуйста, как работать с классом CGraphView. Очень надо. Может кто-то станкивался... Как нарисовать хотя-бы простейший график из нескольких точек... Очень нужно. Добавлено через 2 часа 15 минут Добавил h файлы... Как создавать сами объекты???
C++ Интересное о vector и map. Здравствуйте! 1. В процессе работы с векторами обнаружил интересный момент, представим что у нас есть какой-то вектор и созданные нами какие-то объекты: какой-то_вектор.push_back ( *(new НашОбъект (аргумент1_для_конструктора, аргумент2_для_конструктора,...) ); Таким образом в вектор добавляется динамически созданный объект, внимание, вопрос: после создание выделенная память не чистится... подробнее

Показать сообщение отдельно
тупой
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 15
27.01.2012, 19:43     Дроби!классы
что исправить чтобы скомпилировалось?
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
// дроби.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
class Fraction
{
  private:
    int m_Numerator;
    int m_Denominator;
    bool m_Corrupt;
  public:
    Fraction( int number, int denominator, bool positive );
    void parseFraction( const std::string &fractionString );
    void reduceFraction();
    std::string toString();
    // Getters
    int getNumerator() { return m_Numerator; }
    int getDenominator() { return m_Denominator; }
    bool getCorrupt() { return m_Corrupt; }
    // Setters
    void setNumerator( int numerator ) { m_Numerator = numerator; }
    void setDenominator( int denominator ) { m_Denominator = denominator; }
    // Own operators
    Fraction& operator + ( const Fraction &mulFraction );
    Fraction& operator - ( const Fraction &mulFraction );
    Fraction& operator * ( const Fraction &mulFraction );
    Fraction& operator / ( const Fraction &mulFraction );
};
int findNOD( int a, int b )
{
  while( b > 0)
  {
    int c = a % b;
    a = b; b = c;
  }
  return a;
};
int findNOK( int a, int b )
{
  return findNOD( a, b ) * a * b;
};
Fraction::Fraction( int numerator = 1, int denominator = 1, bool positive = true ) :
m_Numerator(numerator), m_Denominator(denominator), m_Corrupt(false)
{
  if( m_Denominator == 0 ) m_Corrupt = true;
  if( !positive && numerator >= 0 ) m_Numerator *= -1;
};
void Fraction::parseFraction( const std::string &fractionString )
{
  if( fractionString != "" )
  {
    bool positive; // Знак выражения
    unsigned int offset = 0; // На сколько символов сдвигать поиск служебных
    switch (fractionString[0])
    {
      // Проверяем знак, если он вообще существует, сдвигаем поиск на один символ вправо
      case '+': positive = true; offset = 1; break;
      case '-': positive = false; offset = 1; break;
      default: positive = true; offset = 0; break;
    }
    unsigned int slashPos = fractionString.find( "/" ); // Ищем вхождение "/" в строку
    unsigned int spacePos = fractionString.find(" "); // Ищем вхождение пробела, который разделяет целую часть и дробную.
    // Если пробел существует, значит в выражении есть целая часть дроби
    if( spacePos != std::string::npos )
    {
      int fullPart = atoi( fractionString.substr(offset, spacePos-offset).c_str() ); // Шаманим
      int tempNumerator = atoi( fractionString.substr(spacePos+1, slashPos-offset).c_str() ); // С бубном
      // Stay the same
      m_Denominator = atoi( fractionString.substr(slashPos+1, fractionString.size()).c_str() ); // Лучше даже не пытаться понять эти строки
      // 2 3/9 -> 21/9
      m_Numerator = fullPart * m_Denominator + tempNumerator; // Переводим всё выражение в неправильную дробь
    }
    else
    {
      m_Numerator = atoi( fractionString.substr(offset, slashPos-offset).c_str() ); // Если же целой части не существует
      m_Denominator = atoi( fractionString.substr(slashPos+1, fractionString.size()).c_str() ); // Просто парсим
    }
    if( !positive ) m_Numerator *= -1; // Ставим нужный знак числителю
    this->reduceFraction(); // Сокращаем дробь (реализуем далее)
  }
};
void Fraction::reduceFraction()
{
  if( !m_Corrupt )
  {
    int nod = findNOD( abs(m_Numerator), m_Denominator );
    this->setNumerator( m_Numerator / nod );
    this->setDenominator( m_Denominator / nod );
  }
};
std::string Fraction::toString()
{
  std::string formattedFraction;
  if( m_Numerator < 0 ) formattedFraction.append( "-" );
  formattedFraction.append( abs(m_Numerator) / m_Denominator );
  formattedFraction.append( " " );
  formattedFraction.append( abs(m_Numerator) % m_Denominator );
  formattedFraction.append( "/" );
  formattedFraction.append( m_Denominator );
};
Fraction& Fraction::operator * ( const Fraction &mulFraction )
{
  if( !this->m_Corrupt && !mulFraction.m_Corrupt )
  {
    this->setNumerator( m_Numerator * mulFraction.m_Numerator );
    this->setDenominator( m_Denominator * mulFraction.m_Denominator );
    this->reduceFraction();
  }
  return *this;
};
Fraction& Fraction::operator / ( const Fraction &mulFraction )
{
  if( !this->m_Corrupt && !mulFraction.m_Corrupt )
  {
    this->setNumerator( m_Numerator * mulFraction.m_Denominator );
    this->setDenominator( m_Denominator * mulFraction.m_Numerator );
    this->reduceFraction();
  }
  return *this;
};
Fraction& Fraction::operator - ( const Fraction &mulFraction )
{
  int relNumerator;
  int mulNumerator;
  if( !this->m_Corrupt && !mulFraction.m_Corrupt )
  {
    int unionDenominator = findNOK( m_Denominator, mulFraction.m_Denominator );
    relNumerator = m_Numerator * mulFraction.m_Denominator;
    mulNumerator = m_Denominator * mulFraction.m_Numerator;
    this->setNumerator( relNumerator - mulNumerator );
    this->setDenominator( unionDenominator );
    this->reduceFraction();
  }
  return *this;
};
Fraction& Fraction::operator + ( const Fraction &mulFraction )
{
  int relNumerator;
  int mulNumerator;
  if( !this->m_Corrupt && !mulFraction.m_Corrupt )
  {
    int unionDenominator = findNOK( m_Denominator, mulFraction.m_Denominator );
    relNumerator = m_Numerator * unionDenominator;
    mulNumerator = mulFraction.m_Numerator * unionDenominator;
    this->setNumerator( relNumerator * mulNumerator );
    this->setDenominator( unionDenominator );
    this->reduceFraction();
  }
  return *this;
};
 
int main()
{
 
  return 0;
};
Вот что пишет
Для всех выходных данных обновления не требуется.
1> дроби.cpp
1>c:\users\admin\documents\visual studio 2010\projects\дроби\дроби\дроби.cpp(53): error C2678: бинарный "=": не найден оператор, принимающий левый операнд типа "const std::string" (или приемлемое преобразование отсутствует)
1> c:\program files\microsoft visual studio 10.0\vc\include\xstring(707): может быть "std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(std::basic_string<_Elem,_Traits,_Ax> &&)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xstring(761): или "std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(const std::basic_string<_Elem,_Traits,_Ax> &)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xstring(766): или "std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(const _Elem *)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> c:\program files\microsoft visual studio 10.0\vc\include\xstring(771): или "std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::operator =(_Elem)"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> при попытке сопоставить список аргументов "(const std::string, const char [1])"
1>c:\users\admin\documents\visual studio 2010\projects\дроби\дроби\дроби.cpp(98): error C2664: std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::append(const std::basic_string<_Elem,_Traits,_Ax> &): невозможно преобразовать параметр 1 из "int" в "const std::basic_string<_Elem,_Traits,_Ax> &"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Причина: невозможно преобразовать "int" в "const std::basic_string<_Elem,_Traits,_Ax>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1>c:\users\admin\documents\visual studio 2010\projects\дроби\дроби\дроби.cpp(100): error C2664: std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::append(const std::basic_string<_Elem,_Traits,_Ax> &): невозможно преобразовать параметр 1 из "int" в "const std::basic_string<_Elem,_Traits,_Ax> &"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Причина: невозможно преобразовать "int" в "const std::basic_string<_Elem,_Traits,_Ax>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно
1>c:\users\admin\documents\visual studio 2010\projects\дроби\дроби\дроби.cpp(102): error C2664: std::basic_string<_Elem,_Traits,_Ax> &std::basic_string<_Elem,_Traits,_Ax>::append(const std::basic_string<_Elem,_Traits,_Ax> &): невозможно преобразовать параметр 1 из "int" в "const std::basic_string<_Elem,_Traits,_Ax> &"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Причина: невозможно преобразовать "int" в "const std::basic_string<_Elem,_Traits,_Ax>"
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>,
1> _Ax=std::allocator<char>
1> ]
1> Ни один конструктор не смог принять исходный тип, либо разрешение перегрузки конструктора неоднозначно


 Комментарий модератора 
Такие полотна ошибок - под кат!


Добавлено через 3 минуты
ошибку по бинарному "!=" на 53 строчке!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru