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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2011, 21:06   #1
Red_Line
Пользователь
 
Аватар для Red_Line
 
Регистрация: 09.04.2009
Сообщений: 23
По умолчанию Ошибка при запросе метода класса

Help

Код:
#include <iostream>
#include "bow.h"
using namespace std;
int main()
{
	Bow test();
	cout<<test.getStatus;;
	return 0;
}
Изучаю ООП... решил сделать тестовый класс...
Компилица, но с 1 ошибкой:

Код:
 error C2228: left of '.getStatus' must have class/struct/union
Надеюсь сам класс не нужно выкладывать, но если что...
Red_Line вне форума Ответить с цитированием
Старый 11.02.2011, 21:11   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от Red_Line Посмотреть сообщение
Надеюсь сам класс не нужно выкладывать, но если что...
выложи-ка и сам класс...
counter вне форума Ответить с цитированием
Старый 11.02.2011, 21:13   #3
Red_Line
Пользователь
 
Аватар для Red_Line
 
Регистрация: 09.04.2009
Сообщений: 23
По умолчанию

Код:
class Bow
{
	int itsArrows;
	bool ready;
	Bow(void): itsArrows(10), ready(true){srand(time(0));};
	~Bow();
public:
	void shooting();
	void charging();
	bool getStatus();
};

Bow::~Bow()
{
}

void Bow::shooting()
{
	int score;
	score=rand()%11;
	if(!ready)
	{
		cout<<"Лук не готов к стрельбе, натяните тетеву\n";
		return;
	}
	if(score==0) cout<<"Вы промахнулись\n";
	else cout<<"Вы попали в "<<score<<".\n";
	return;
}

void Bow::charging()
{
	itsArrows=10;
}

bool Bow::getStatus()
{
	if(itsArrows>0 && ready==true) return true;
	else return 0;
}
...что наз-ца догадайтесь по какой книге я изучаю с++ :Р
Red_Line вне форума Ответить с цитированием
Старый 11.02.2011, 21:24   #4
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

1) Конструктор и деструктор должны быть public
2)При создании объекта лишние (), а при обращении к методу класса не хватает ()
Код:
Bow test;
cout<<test.getStatus();
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 11.02.2011, 21:24   #5
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

конструктор и деструктор класса должны быть объявлены как public

ну а тут просто скобки забыл

cout<<test.getStatus();

Опередили...
counter вне форума Ответить с цитированием
Старый 11.02.2011, 21:27   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

а где скобки после гетстатуса?
p51x вне форума Ответить с цитированием
Старый 11.02.2011, 21:29   #7
Red_Line
Пользователь
 
Аватар для Red_Line
 
Регистрация: 09.04.2009
Сообщений: 23
По умолчанию

Закинул конструктор и деструктор в паблик, поставил скобочки, ошибка осталась

Код:
#include <iostream>
#include "bow.h"
using namespace std;
int main()
{
	Bow test();
	cout<<test.getStatus();
	return 0;
}

Код:
#include <time.h>



class Bow
{
	int itsArrows;
	bool ready;
public:
	Bow(void): itsArrows(10), ready(true){srand(time(0));};
	~Bow();
	void shooting();
	void charging();
	bool getStatus();
};
Red_Line вне форума Ответить с цитированием
Старый 11.02.2011, 21:36   #8
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Замени
Код:
Bow test();
на
Код:
Bow test;
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 11.02.2011, 21:40   #9
Red_Line
Пользователь
 
Аватар для Red_Line
 
Регистрация: 09.04.2009
Сообщений: 23
По умолчанию

2 Sam Gold
Спасибо всем и Вам в частности! Скомпилилось... если Вас не затруднит, объясните почему нельзя пустое поле аргументов ставить? Это он обращается к дефолтному конструктору со скобками в моём случае?
Red_Line вне форума Ответить с цитированием
Старый 11.02.2011, 22:07   #10
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Цитата:
объясните почему нельзя пустое поле аргументов ставить?
Компилятор это лучше меня скажет:
Цитата:
request for member `getStatus' in `test', which is of non-aggregate type `Bow ()()'
Цитата:
Это он обращается к дефолтному конструктору со скобками в моём случае?
Да
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при вызове метода класса coNsept Общие вопросы C/C++ 2 14.12.2010 13:09
Ошибка при реализации метода класса, имеющего поле шаблоннного типа. DKOI Общие вопросы C/C++ 5 19.10.2010 19:10
Ошибка при запросе SQL в IB Алекс1 БД в Delphi 2 24.06.2007 22:37