首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有仅在创建不同文件中的对象时出现的匹配函数调用。

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

Stack Overflow用户
提问于 2015-05-23 07:24:22
回答 1查看 94关注 0票数 0

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

代码语言:javascript
复制
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的实现文件中的主函数创建对象时,我没有收到任何这些错误。只有当我试图在TestSuiteAssignment4.cpp文件中创建一个对象时,我才会得到这个错误。

这是CreatureStack.hpp文件。

代码语言:javascript
复制
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在实现文件CreatureStack.cpp中的构造函数

代码语言:javascript
复制
#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实现文件的主文件

代码语言:javascript
复制
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时,我才会遇到构造函数的编译错误。

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

代码语言:javascript
复制
#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中时,就会得到一个匹配的函数调用错误,在实现文件中进行测试时根本不会出现这种错误。

谢谢任何可能的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-23 07:37:47

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

代码语言:javascript
复制
CreatureStack::CreatureStack(Creature* creature, CreatureStack* nextArg = NULL)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30410111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档