【问题标题】:Void Parameter Type Causes Missing Type Error无效参数类型导致缺少类型错误
【发布时间】:2012-01-10 03:05:28
【问题描述】:

这是原型:

void RecvProxy_ToggleSights( const CRecvProxyData* pData, void* pStruct, void* pOut );

然后是函数本身:

void RecvProxy_ToggleSights( const CRecvProxyData* pData, void* pStruct, void* pOut ){

CBaseCombatWeapon *pWeapon = (CBaseCombatWeapon*)pStruct;
if( pData->m_Value.m_Int )
    pWeapon->EnableIronsights();
else
    pWeapon->DisableIronsights();}

然后此代码(原型和定义)生成的错误消息:

错误 19 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int f:\Mods\CI Testbed\src\game\shared\basecombatweapon_shared.cpp 47

我该如何解决这个错误?

【问题讨论】:

  • 文件basecombatweapon_shared.cpp 使用了一些未定义的类型。这可能是因为您弄乱了 #include 依赖项(即丢失了一些,或者一些顺序错误)。
  • 给出的代码很好(并且 void* 完全有效)。您确定它不是另一个函数并且宏正在向您的代码添加行吗?另外,请查看四周以确保所有函数都有返回值。
  • 哪一行是第 47 行?是否有可能您没有正确#include 此处使用的其中一种类型?
  • @pragnar 请参阅下面发布的 pastebin 链接,了解上述 sn-ps 来自的 .cpp 文件的全部内容。原型是第 47 行。该函数在第 2594 行更靠后。

标签: c++ sdk void


【解决方案1】:

是否定义了“CRecvProxyData”类型?您的代码在其他方面是正确的(假设所有用户定义的类型都已正确定义),但我建议您将函数定义的左大括号和右大括号放在它们自己的行上。

另外,我对 void* 提出异议:它有点像 C 语言的后遗症,您应该在必要时从源代码中消除它。你能用多态性或模板代替吗?

您可能缺少#include,或者在您的包含保护中出错。如果您可以发布定义了“CRecvProxyData”的文件管理器的内容以及围绕您发布的内容的代码,那将是一个很大的帮助。否则,我只能推测:)。

【讨论】:

  • 这里是定义 CRecvProxyData 的地方:// This is passed into RecvProxy functions. class CRecvProxyData { public: const RecvProp *m_pRecvProp; // The property it's receiving. DVariant m_Value; // The value given to you to store. int m_iElement; // Which array element you're getting. int m_ObjectID; // The object being referred to. }; 我还将发布一个指向原始代码所在的 cpp 文件实体的 Pastbin 链接。
  • 看起来(CRecvProxyData 的定义来自dt_recv.h,但是该标头未包含在您的源代码中。
  • 对不起,我花了这么长时间才回过神来,我认为 DRH 是正确的:CRecvProxyData 的定义可能存在于您向我们展示的源文件中未包含的头文件中,并因此导致错误。老实说,这是我能看到的唯一可能的原因。
  • @DRH 哇,这实际上修复了它。还有其他错误,但它们与此错误类型相同,所以知道我知道如何修复它们。谢谢!一年半以来,我一直试图弄清楚这一点。
猜你喜欢
  • 2018-03-28
  • 2012-02-23
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2017-08-20
  • 2016-06-13
相关资源
最近更新 更多