【问题标题】:free struct too many arguments in function call函数调用中释放的结构太多参数
【发布时间】:2012-10-06 22:53:12
【问题描述】:

我有一个列表结构:

typedef struct FaceNode{
    FaceNode *next;
    Face *aFace;
    FaceNode *prev; 
} FaceNode;

我使用这个结构作为成员:

FaceNode *myFaces;

并像这样初始化它(在构造函数中)

this->myFaces = (FaceNode*)malloc(sizeof(FaceNode)*1);

稍后我想按如下方式释放它:

FaceNode *theCurrentFaceNode;
Face* theCurrentFace;

while(this->myFaces->next){

   theCurrentFaceNode = this->myFaces;
   theCurrentFace = theCurrentFaceNode->aFace;

   this->myFaces = this->myFaces->next;

   free(theCurrentFace);
   free(theCurrentFaceNode);
}

现在我的 IDE 告诉我:“错误,函数调用中的参数太多”,对于免费调用。

这有什么问题?

干杯

【问题讨论】:

  • 问题在于这是“C with classes”,而不是 C++。如果你没有使用this->,这将只是 C 代码。
  • 是命名空间问题吗?我的意思是,您的应用中是否定义了另一个不带参数的“free()”?
  • 正如@Xeo 暗示的那样,您可能应该在这里使用std::list<Face>。这也将使您在清醒后更容易切换到比链接列表更合理的数据结构。
  • 他这样做可能是为了练习,而不是真正编写生产代码。
  • @Seth:没有理由使用mallocfreetypedef struct Name {...} Name;。这都是愚蠢的C语言。

标签: c++ function struct arguments free


【解决方案1】:

您显然已经声明了一个名为free 的函数,编译器发现它不是您认为调用的函数。使用作用域解析运算符调用全局函数:

::free(theCurrentFace);

或者找到另一个free 函数并给它一个不同的名字。它可能是您正在实现的类的成员;也可以查看该类的祖先类。

【讨论】:

  • 是的,我是个白痴:D(不能在 10 分钟内接受你的回答,我稍后再检查!)
猜你喜欢
  • 2015-12-29
  • 1970-01-01
  • 2013-03-24
  • 2017-04-04
  • 1970-01-01
  • 2011-04-11
  • 2020-11-17
  • 1970-01-01
  • 2019-01-19
相关资源
最近更新 更多