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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 25.07.2009, 01:17   #1
TheWanderer
Пользователь Подтвердите свой е-майл
 
Регистрация: 01.10.2008
Сообщений: 82
По умолчанию Помогите разобраться с ошибкой: error C3867(Visual C++)

При компиляции программы выскакивает сообщение об ошибке:
1>f:\c++\test\test\test.cpp(145) : error C3867: Mammal::Speak: в вызове функции отсутствует список аргументов; используйте "&Mammal::Speak" для создания указателя на член
1>f:\c++\test\test\test.cpp(146) : error C3867: Mammal::Move: в вызове функции отсутствует список аргументов; используйте "&Mammal::Move" для создания указателя на член
Код:
#include <iostream>

using std::cout;
using std::cin;

class Mammal
{
public:
	Mammal():itsAge(1) {}
	virtual ~Mammal() {}
	virtual void Speak() const = 0;
	virtual void Move() const = 0;
protected:
	int itsAge;
};

class Dog : public Mammal
{
public:
	void Speak() const { cout << "Woof!\n"; }
	void Move() const { cout << "Walkin to heel...\n"; }
};

class Cat : public Mammal
{
public:
	void Speak() const { cout << "Meow!\n"; }
	void Move() const { cout << "sliking...\n"; }
};

class Horse : public Mammal
{
public:
	void Speak() const { cout << "Winnie!\n"; }
	void Move() const { cout << "Galloping...\n"; }
};

int main()
{
	void (Mammal::*pFunc)() const = 0;
	Mammal *ptr = 0;
	int Animal;
	int Method;
	bool fQuit = false;

	while(fQuit == false)
	{
		cout << "(0)Quit (1)Dog (2)cat (3)horse: ";
		cin >> Animal;
		switch(Animal)
		{
		case 1: ptr = new Dog;
			break;
		case 2: ptr = new Cat;
			break;
		case 3: ptr = new Horse;
			break;
		default: fQuit = true;
			break;
		}
		if(fQuit)
			break;

		cout << "(1)Speak (2)Move: ";
		cin >> Method;
		switch(Method)
		{
		case 1: pFunc = Mammal::Speak;
			break;
		default: pFunc = Mammal::Move;
			break;
		}

		(ptr->*pFunc)();
		delete ptr;
	}
	return 0;
}
Подскажите, пожалуйста, где я сделал ошибку, а то я её что то найти не могу…
P.S: Использую Microsoft Visual C++ 2008 Express Edition.
TheWanderer вне форума
Старый 25.07.2009, 01:46   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Эмм... Так он же пишет ошибку и даже говорит, что делать надо))

Цитата:
1>f:\c++\test\test\test.cpp(145) : error C3867: Mammal::Speak: в вызове функции отсутствует список аргументов; используйте "&Mammal::Speak" для создания указателя на член
1>f:\c++\test\test\test.cpp(146) : error C3867: Mammal::Move: в вызове функции отсутствует список аргументов; используйте "&Mammal::Move" для создания указателя на член
Сделайте как он говорит и всё будет работать
Код:
	case 1: pFunc = &Mammal::Speak;  // Без & данная строка интерпретируется как попытка вызвать ф-цию Mammal::Speak.
			break;                           // "&" Указывает, что надо взять адрес этой ф-ции, а не вызывать её
		default: pFunc = &Mammal::Move;
			break;
netrino вне форума
Старый 25.07.2009, 14:20   #3
TheWanderer
Пользователь Подтвердите свой е-майл
 
Регистрация: 01.10.2008
Сообщений: 82
По умолчанию

netrino спасибо за помощь
TheWanderer вне форума
Закрытая тема


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
с ошибкой разобраться помогите mshunter Помощь студентам 2 13.05.2009 11:47
Помогите разобраться с ошибкой Muchacho Помощь студентам 8 08.11.2008 23:39
Помоги разобраться с ошибкой, пожалуйста Turok Паскаль, Turbo Pascal, PascalABC.NET 4 17.06.2008 22:58