sora97 Ответов: 3

Ошибка "отсутствует вызов функции..." справка


Черт возьми, я обновляю игровой движок, но получаю ошибки
Я не знаю, как это исправить

код ошибки:
'
1> - - - - - - начата сборка: проект: hl, конфигурация: Debug Win32 ------
1> gonome.cpp
1>d:\src_dll\dlls\gonome.cpp(115): ошибка C3867: 'CGonomeSpit::Animate': вызов функции отсутствует список аргументов; используйте '&CGonomeSpit::Animate' для создания указателя на член
1&ГТ;d:\src_dll\dlls\gonome.cpp(164): ошибка C3867: 'базовом классе cbaseentity::SUB_Remove': функции отсутствует список вызовов аргументов; используйте '&амп;базовом классе cbaseentity::SUB_Remove для создания указателя на член

========== Сборка: 0 успешно, 1 неудачно, 0 обновлено, 0 пропущено ==========
'

исходный код:

void CGonomeSpit::Animate( void )
{
    pev->nextthink = gpGlobals->time + 0.1;

    if ( pev->frame++ )
    {
        if ( pev->frame > m_maxFrame )
        {
            pev->frame = 0;
        }
    }
}



//=========================================================
// Gonome's spit projectile
//=========================================================
class CGonomeSpit : public CBaseEntity
{
public:
	void Spawn( void );

	static void Shoot( entvars_t *pevOwner, Vector vecStart, Vector vecVelocity );
	void Touch( CBaseEntity *pOther );
	void EXPORT Animate( void );

	virtual int		Save( CSave &save );
	virtual int		Restore( CRestore &restore );
	static	TYPEDESCRIPTION m_SaveData[];

	int  m_maxFrame;
};



Я понятия не имею, как исправить код

Пожалуйста, помогите мне

3 Ответов

Рейтинг:
27

mbue

Существует небольшая разница между старым компилятором и новым:

void mycallback()
{
}
void worker(void (*fn)())
{
  (*fn)();
}
void main()
{
  // accepted only by devstudio 6 and lower
  worker(mycallback); // old compiler makes an implicit cast to a function call
  // function parameter for new devstudio
  worker(&mycallback); // new compiler needs an explicit cast to a function call
}

С уважением.


sora97

Я использую microsoft visual c++ 2010 express

mbue

хорошо. я продолжаю:

// old compiler
class A
{
public:
void Do(){}
void worker(void (A::*fn)())
{
(this->*fn)();
}
};

void main()
{
A a;
a.worker(A::Do);
}


// new compiler
void main()
{
A a;
a.worker(&A::Do);
}

Вам нужно только добавить '&' перед именем функции в качестве параметра.
С уважением.

sora97

SetThink ( SUB_Remove ); //добавлено &
но код ошибки:
1> - - - - - - начата сборка: проект: hs, конфигурация: Debug Win32 ------
1> gonome.cpp
1&ГТ;d:\src_dll\dlls\gonome.cpp(164): ошибка C3867: 'базовом классе cbaseentity::SUB_Remove': функции отсутствует список вызовов аргументов; используйте '&амп;базовом классе cbaseentity::SUB_Remove для создания указателя на член
========== Сборка: 0 успешно, 1 неудачно, 0 обновлено, 0 пропущено ==========

mbue


SetThink ( &CBaseEntity::SUB_Remove );

Sergey Alexandrovich Kryukov

Мой 5.
--СА

Рейтинг:
18

Philippe Mori

Вы также можете иметь что-то неправильное перед этим, например отсутствующий}, что заставит компилятор попытаться скомпилировать код, как если бы он был внутри функции.


Рейтинг:
0

Member 13544590

Если(a<i)
{
Printf("%d", значение метки) ;
}


CHill60

Это даже близко не подходит к решению вопроса более чем шестилетней давности, который уже имеет принятые решения.
Придерживайтесь ответов на новые вопросы, где ОП все еще нуждается в помощи. Убедитесь, что ваш ответ релевантен и точен, а не повторяет что-то уже опубликованное.