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

Ошибка в коде или компилятор не понимает меня? - C++

Восстановить пароль Регистрация
 
blunt
Сообщений: n/a
26.03.2010, 12:30     Ошибка в коде или компилятор не понимает меня? #1
Добрый день. Изучаю, с недавнего времени, с++ по книге Джесса Либерти "С++ за 21 день". Использую компилятор Dev-C++. И как ни странно возникают проблемы, ошибки, которые, к сожалению не могу отловить сам. Поэтому не вижу другого варианта как обратиться к "гуру" =)
Собственно, сами проблемы:
1) Как реализовать что бы при делении двух int переменных результат заносился в флоат и результат имел и часть после запятой=) То есть примерно следующее:
C++
1
2
3
4
5
6
7
8
9
#include <iostream.h>
int main(){
int x=5;
int y=7;
float z;
z=(float)(x\y); //вот тут сама проблема. Пришла в голову идея заводить еще одну переменную типа float(обзову ее g). И затем перед вычислением z, написать строку g=y+0.0 и в рассчете z использовать уже не y а g
system("pause");
return 0;
}
Так и надо или есть какой-то более легкий и производительный вариант?


2) Есть файл rect.hpp в котором описывается два класса. Содержание файла rect.hpp
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
#include <iostream>
 
class Point{
      public:
             int GetX() const{return itsX};
             int GetY() const {return itsY};
             void SetX(int x) {itsX=x};
             void SetY(int y) {itsY=y};
      private:
              int itsX;
              int itsY;
      }
      
      
class Rectale{
      Rectale(int top, int left, int bottom, int right);
      ~Rectale(){}
      
      int GetTop() const {return top;}
      int GetLeft() const {return left;}
      int GetRight() const {return right;}
      int GetBottom() const {return bottom;}
      
      Point GetUpperLeft() const {return itsUpperLeft;}
      Point GetUpperRight() const {return itsUpperRight;}
      Point GetDownLeft() const {return itsDownLeft;}
      Point GetDownRight() const {return itsDownRight;}
      
      void SetUpperLeft(Point Location){itsUpperLeft=Location;}
      void SetUpperRight(Point Location) {itsUpperRight=Location;}
      void SetDownLeft(Point Location) {itsDownLeft=Location;}
      void SetDownRight(Point Location) {itsDownRight=Location;}
      
      void SetTop(int top){itsTop=top;}
      void SetLeft(int left){itsLeft=left;}
      void SetRight(int right){itsRight=right;}
      void SetBottom(int botton){itsBottom=bottom;}
      
      int GetArea() const;
      
      
      private:
      int itsTop;
      int itsLeft;
      int itsRight;
      int itsBottom;
      Point itsUpperLeft;
      Point itsUpperRight;
      Point itsDownLeft;
      Point itsDownRight;        
      }
И файл day6.cpp:
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
#include <rect.hpp>
 
Rectale::Rectale(int top, int left, int bottom, int right){
                     itsTop=top;
                     itsLeft=left;
                     itsBottom=bottom;
                     itsRight=right;
                     
                     itsUpperLeft.SetX(left);
                     itsUpperLeft.SetY(top);
                     itsUpperRight.SetX(right);
                     itsUpperRight.SetY(top);
                     itsDownLeft.SetX(left);
                     itsDownLeft.SetY(bottom);
                     itsDownRight.SetX(right);
                     itsDownRight.SetY(bottom);
                     }
int Rectale::GetArea  () const{
                   int W=itsRight-itsLeft;
                   int H=itsTop-itsBottom;
                   return W*H;
                   }
                   
int main(){
    Rectale myRect(100, 20, 50, 80);
    int Area=myRect.GetArea();
    
}
Так вот Dev-c++ выдает ошибки на строчке "Rectale::Rectale(int top, int left, int bottom, int right)":
4 F:\programs\Dev-Cpp\123\day6.cpp new types may not be defined in a return type
4 F:\programs\Dev-Cpp\123\day6.cpp two or more data types in declaration of `Rectale'
4 F:\programs\Dev-Cpp\123\day6.cpp return type specification for constructor invalid

По первой и последней строчке могу сказать что из я не понимаю, точнее не понимаю что это возвращаемый тип в кострукторе. То по второй строчке могу сказать что не нравятся компилятору типы объявленные в этом методе, самое интересное что при наведении на них они показываются как "LONG top" и тп =)

Помогите, пожалуйста, и подтолкните к правильным действиям. Заранее спасибо=)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2010, 12:30     Ошибка в коде или компилятор не понимает меня?
Посмотрите здесь:

Почему компилятор не понимает тип bool? C++
у меня ошибка в коде проверьте!!! C++
И снова у меня ошибка в коде C++
C++ Почему у меня ошибка в коде?
C++ Неизвестная (для меня) ошибка в коде!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
26.03.2010, 12:47     Ошибка в коде или компилятор не понимает меня? #2
1.
C
1
z=((float)x)/((float)y);
или
C++
1
z=static_cast<float>(x)/static_cast<float>(y);
Обрати внимание, в качестве оператора деления используется прямой слэш, а не обратный
Genius Ignat
26.03.2010, 12:51
  #3

Не по теме:


компилятор не понимает меня?
А если бы меня понимал : это был бы не компилятор, а не понятно что.

Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
26.03.2010, 13:20     Ошибка в коде или компилятор не понимает меня? #4
После объявления классов надо ставить ";"
Свой заголовочный файл надо объявлять в не в угловых скобках, а в кавычках (если, конечно, он не расположен в стандартной директории):
C++
1
#include "rect.hpp"
5-7 строчки в заголовочном файле - пропущены ";" :
C++
1
int GetX() const{return itsX/*Вот здесь*/;};
В классе rectale не отрыты методы:
C++
1
2
3
4
5
6
7
8
9
      
class Rectale{
//Вот здесь должно быть public:
      Rectale(int top, int left, int bottom, int right);
      ~Rectale(){}
      
      int GetTop() const {return top;}
      int GetLeft() const {return left;}
      int GetRight() const {return right;}
Добавлено через 2 минуты
C++
1
2
3
4
5
6
      ~Rectale(){}
      
      int GetTop() const {return top;}
      int GetLeft() const {return left;}
      int GetRight() const {return right;}
      int GetBottom() const {return bottom;}
Здесь вместо return top, я полагаю, нужно return itsTop (вместо left - itsLeft и так далее), так как членов с таким именем у класса нет

Добавлено через 3 минуты
Те же 5-7 строчки в заголовочном файле - после описания методов ";" не нужна:
C++
1
int GetX() const{return itsX/*Вот здесь*/;}/*А вот здесь не надо ";"*/
Добавлено через 2 минуты
В строке 37 опечатка - вместо bottom написано botton:
C++
1
2
      void SetRight(int right){itsRight=right;}
      void SetBottom(int bottom/*Опечатка была здесь*/){itsBottom=bottom;}
Добавлено через 1 минуту
После всех этих правок мне наконец-то удалось скомпилировать программу.

Добавлено через 4 минуты

Не по теме:

Либо ты очень невнимательно переписывал код, либо твоя книжка - г*вно


А теперь про мелкие недочеты. Функция main у тебя не возвращает значения; конечно, большинство компиляторов произведут возврат неявно, но все же это не есть хорошо.
ЗЫ. Я бы для инициализации членов класса использовал бы списки инициализации (хотя, в принципе, это не существенно)

Добавлено через 2 минуты
ЗЗЫ. Нужно предотвратить повторное включение заголовочного файла конструкцией #ifndef-#define-#endif (или с помощью директивы #pragma once, если твой компилятор ее поддерживает)

Добавлено через 4 минуты
Цитата Сообщение от Genius Ignat Посмотреть сообщение
А если бы меня понимал : это был бы не компилятор, а не понятно что.

Не по теме:

Если бы компилятор мог это понять, я думаю, программисты были бы уже не нужны

blunt
Сообщений: n/a
26.03.2010, 13:42     Ошибка в коде или компилятор не понимает меня? #5
Спасибо большое! И извинюсь за свою полоротость, почти все косяки это моя вина. Пытался не переписывать, а после просмотра кода и понятия алгоритма и цели пытался сам писать, а при проверке не видел всех неточностей. Самое странное что опечатку botton, строчки 5-7, и открытие Rectale исправлял, ну за отсутствия return 0 - мне совсем стыдно. =) Основная ошибка изза чего Dev-C++ не хотел выполнять код это из-за отсутствия ";" после объявления классов.
Стыдно до ужаса, извиняюсь за столь глупые вопросы, постараюсь исправиться в ближайшее время =)
Yandex
Объявления
26.03.2010, 13:42     Ошибка в коде или компилятор не понимает меня?
Ответ Создать тему
Опции темы

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