Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2012, 06:17   #1
KoctR
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 16
По умолчанию Как передать обьетк классу???

Привет всем. Такая проблема, создал класс "Bus" и два обьека, "Bus1" и "Bus2". Теперь, как передать обьект "Bus2" обьекту "Bus1" чтоб последний смог воспользоватся одной из функций первого?

Код:
//TheBus.cpp

#include <iostream>
#include "CBus.h"
using namespace std;

int main()
{
	CBus Bus1(128, 4.2);
	CBus Bus2(240, 3.5);

	int test = Bus1.compare(Bus2);

	if(test == -1)
	{ cout << "The first bus burns less fuel than the second one\n"; }
	else if(test == 1)
	{ cout << "The second bus burns more fuel than the second one\n"; }
	else
	{ cout << "Both buses burn same amount of fuel\n"; }

	cout << Bus1.getLitters() << endl;

	return 0;
}
Код:
//CBus.h
#ifndef CBUS_H_
#define CBUS_H_

class CBus
{
private:
	int number;
	float litters;

public:
	CBus(int num, float litters);

	int getNumber(void);
	float getLitters(void);

	void setNumber(int input);
	void setLitters(float input);

	int compare(CBus input);
};

#endif
Код:
CBus.cpp
#include "CBus.h"

CBus::CBus(int input1, float input2)
{
	number = input1;
	litters = input2;
}

int CBus::getNumber()
{ return number; }
float CBus::getLitters()
{ return litters; }

void CBus::setNumber(int input)
{ number = input; }
void CBus::setLitters(float input)
{ litters = input; }

int CBus(CBus input)
{
	if(input.getLitters() < CBus::litters)
	{ return 1;	}
	else if(input.getLitters() > CBus::litters)
	{ return -1; }
	else
	{ return 0; }
}
Ошибка находится в "CBus.cpp". Когда я прописываю "input.getLitters()" компилятор пишет ошибку "Method getLitters() could not be resolved".

Зарание извиняюсь если гдето в выражениях ошибся, я новичек в програмирование и совсем чайник в C++.

Зарание спасибо.
KoctR вне форума Ответить с цитированием
Старый 24.03.2012, 09:16   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

уберите void из параметров get***.
это не С же.

и я бы передавал ссылку, а не объект.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.03.2012, 10:04   #3
KoctR
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
и я бы передавал ссылку, а не объект.
Уже пробовал. Это была моя первая мысль, передавать ссылку на объект. Но появляется такаяже ошибка.

Этот метод работает отлично в Objective C. И там я передаю именно ссылки, но странно что в С++ это не работает...
KoctR вне форума Ответить с цитированием
Старый 24.03.2012, 12:45   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Вот здесь, что ты пытаешься сделать?

Код:
if(input.getLitters() < CBus::litters)
Что должно находится в правой части булева выражения, по твоей задумке?

Последний раз редактировалось _Bers; 24.03.2012 в 14:56.
_Bers вне форума Ответить с цитированием
Старый 25.03.2012, 04:31   #5
KoctR
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
Вот здесь, что ты пытаешься сделать?

Код:
if(input.getLitters() < CBus::litters)
Что должно находится в правой части булева выражения, по твоей задумке?

"input" это класс который я передал функции ка параметр и там есть функция которая возврящает переменную.

Код:
if(input.getLitters() < CBus::litters)
Тут я пытаюсь проверить в каком из объектов эта переменная имеет меньшее значение.
Тоесть input.getLitters() это переменная litters переданого объекта, а CBus::litters переменная пренадлежащая данному объекту.

Последний раз редактировалось KoctR; 25.03.2012 в 04:33.
KoctR вне форума Ответить с цитированием
Старый 25.03.2012, 04:53   #6
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
CBus::litters переменная пренадлежащая данному объекту.
Какому данному объекту? Где он задан?

input - это да, объект класса.
а CBus не объект, а просто тип.

////int CBus(CBus input)??????
int CBus::compare(CBus& input)
{
if(input.litters < litters)
...

Последний раз редактировалось EUGY; 25.03.2012 в 05:14.
EUGY вне форума Ответить с цитированием
Старый 25.03.2012, 05:09   #7
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от KoctR Посмотреть сообщение
"input" это класс который я передал функции ка параметр и там есть функция которая возврящает переменную.

Код:
if(input.getLitters() < CBus::litters)
Тут я пытаюсь проверить в каком из объектов эта переменная имеет меньшее значение.
Тоесть input.getLitters() это переменная litters переданого объекта, а CBus::litters переменная пренадлежащая данному объекту.
input у вас - это не класс. А CBus::litters описывает собственность класса, а не объекта.

Итого: учите тему "классы на с++".

Цитата:
Сообщение от KoctR Посмотреть сообщение
Этот метод работает отлично в Objective C. И там я передаю именно ссылки, но странно что в С++ это не работает...
Странно, что в шашках пешки ходят наискосяк, ведь в шахматах они ходят прямо!
_Bers вне форума Ответить с цитированием
Старый 25.03.2012, 05:24   #8
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Единственно, где бы прокатило CBus::litters, это если бы litters была задана как static.

Цитата:
Странно, что в шашках пешки ходят наискосяк, ведь в шахматах они ходят прямо!

Я у автора даже не увидел попытки передать что-то по ссылке, чтобы сделать вывод о какой-то разнице в языках.
EUGY вне форума Ответить с цитированием
Старый 25.03.2012, 05:46   #9
KoctR
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от EUGY Посмотреть сообщение
Единственно, где бы прокатило CBus::litters, это если бы litters была задана как static.



Я у автора даже не увидел попытки передать что-то по ссылке, чтобы сделать вывод о какой-то разнице в языках.
Шашки и шахматы две совершенно разные игры, а С и С++ по сути похоже.
И метод этот работает. Вот исправленый код если вам интересно...
Код:
void CBus::compare(CBus input)
{
	float n = litters;
	float m = input.getLitters();

	if(n < m)
		{cout << "Bus number " << number << " consumes less fuels than bus number " << input.getNumber() << endl;}
	else if (n > m)
		{cout << "Bus number " << number << " consumes more fuels than bus number " << input.getNumber() << endl;}
	else
		{cout << "Bus number " << number << " and " << input.getNumber() << " consume same ammount of fuel"  << endl;}
}
Отлично все работает. Проблемма заключалась только в названии функции. Я сменил void CBus(CBus input) на void CBus::compare(CBus input), и заработало. Это мой промах потому что я не заметил что прописал еще один конструктор для класса.

К сожалению правду говорит поговорка:
Американский форум - задаеш вопрос и получаеш ответ.
Русский форум - задаеш вопрос и тебе объясняют какой ты мудак


Да кстати, и передача объекта по ссылке тоже отлично работает, пробовал. Проблема была только в имене функции

Последний раз редактировалось KoctR; 25.03.2012 в 05:50.
KoctR вне форума Ответить с цитированием
Старый 25.03.2012, 05:57   #10
KoctR
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 16
По умолчанию

И еще один вопросик...

На парах мы прогрмируем на MAC OS и в Objective C при этом пользуем framework Foundation.
По сути вышеупомянутая функция "CBus::compare" должна возвращать NSComparisonResult.

Этот фремворк можно в С++ использовать, или может есть чтото другое для С++?
KoctR вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как привязать функцию к классу? minamoto Общие вопросы Delphi 26 25.08.2011 16:08
Как из класса B обратиться к классу A, владеющему классом B? Ferrum26 Общие вопросы Delphi 14 24.06.2010 09:46
Как узнать какому классу принадлежит объект? boris-blade Общие вопросы .NET 3 08.04.2010 01:08
Параметр классу? Непонятный с++. jojahti Общие вопросы C/C++ 4 16.10.2009 08:55
Как через свич раздать по классу Инет soktahan Свободное общение 4 16.11.2008 10:54