gpt4 book ai didi

c++ - 没有仅在不同文件中创建对象时出现的匹配函数调用

转载 作者:行者123 更新时间:2023-11-28 02:26:40 25 4
gpt4 key购买 nike

我目前在 C++ 中遇到一个不匹配的函数调用错误,内容如下

TestSuiteAssignment4.cpp: In function ‘int main()’:
TestSuiteAssignment4.cpp:533: error: no matching function for call to
‘CreatureStack::CreatureStack(Creature*&)’
CreatureStack.hpp:32: note: candidates are:
CreatureStack::CreatureStack(Creature*, CreatureStack*)
CreatureStack.hpp:31: note: CreatureStack::CreatureStack()
CreatureStack.hpp:18: note: CreatureStack::CreatureStack(const CreatureStack&)

.

奇怪的是,当我通过 CreatureStack 的实现文件中的 main 函数创建对象时,我没有遇到任何这些错误。只有当我尝试在 TestSuiteAssignment4.cpp 文件中创建一个对象时,我才会收到此错误。

这是 CreatureStack.hpp 文件。

class CreatureStack
{
private:
CreatureStack* next;
CreatureStack* last;
CreatureStack* first;
Creature* item;

public:
int count;
Creature* remove();
void add(Creature* item);
bool empty();
int returnCount();
CreatureStack();
CreatureStack(Creature* creature, CreatureStack* nextArg);

};

这里是实现文件CreatureStack.cpp中CreatureStack的构造函数

#include <iostream>
#include "CreatureStack.hpp"
#include "Creature.hpp"
#include "Goblin.hpp"


/****************************************************************************
** Function: default constructor
** Description: constructs instacklist object
** Parameters: none
** Pre-conditions: no object created
** Post-conditions: object created
****************************************************************************/


CreatureStack::CreatureStack()
{
}



/****************************************************************************
** Function: constructor
** Description: constructs object with arguments
** Parameters: int item, and pointer to next intstacklist object
** Pre-conditions: no object created
** Post-conditions: object created
****************************************************************************/



CreatureStack::CreatureStack(Creature* creature, CreatureStack* nextArg = NULL)
{
/*initiate object with the item argument, and a pointer to an IntStackList Object for Next */

item = creature;
next = nextArg;
count = 1;
last = this;
}

这是 CreatureStack 实现文件的主要文件

int main()
{


Creature* test1 = new Goblin();
Creature* test2 = new Goblin();
Creature* test3 = new Goblin();

Creature* testPoint;

test1->setId(1);
test2->setId(2);
test3->setId(3);

CreatureStack stack1 = CreatureStack(test1);
stack1.add(test2);
stack1.add(test3);
}

当我运行这些代码行时,根本没有构造函数问题/编译问题。

只有当我创建一个新文件 TestSuiteAssignment4.cpp 时,我才遇到构造函数的编译错误。

在新文件中,我只有以下代码。

#include <iomanip>
#include <string>
#include <vector>
#include <cstdlib>
#include "Dice.hpp"
#include "CreatureStack.hpp"
#include "CreatureQueue.hpp"
#include "Creature.hpp"
#include "Goblin.hpp"

int main()
{

Creature* test1 = new Goblin();
Creature* test2 = new Goblin();
Creature* test3 = new Goblin();

Creature* testPoint;

test1->setId(1);
test2->setId(2);
test3->setId(3);

CreatureStack stack1 = CreatureStack(test1);
stack1.add(test2);
stack1.add(test3);

}

当我尝试编译 TestSuiteAssignment4.cpp 时遇到的无匹配函数错误调用让我感到困惑,因为当我尝试在 CreatureStack 实现文件中创建 CreatureStack 对象时,我完全没有遇到任何问题。但是,当我将完全相同的代码放入 TestSuiteAssignment4.cpp 时,我得到了一个匹配的函数调用错误,在实现文件中进行测试时根本不会出现这个错误。

感谢任何可能的帮助。

最佳答案

您应该将默认值(如下)移动到头文件

CreatureStack::CreatureStack(Creature* creature, CreatureStack* nextArg = NULL)

关于c++ - 没有仅在不同文件中创建对象时出现的匹配函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30410111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com