gpt4 book ai didi

c++ - 初始化指向模板的指针时未解析的外部符号

转载 作者:行者123 更新时间:2023-11-27 23:18:13 25 4
gpt4 key购买 nike

请看下面的代码

Weapon.h

**

#pragma once
#include "GameObject.h"
#include "Stack.h"
#include "Round.h"
class Weapon :
public GameObject
{
public:
Weapon(int);
~Weapon(void);
Stack <Round> *stack1(int rounds) ;
Weapon *next;
void display();
};

**

Weapon.cpp

#include "Weapon.h"
#include <iostream>

using namespace std;

Weapon::Weapon(int size)
{
stack1(size);
}


Weapon::~Weapon(void)
{
}

void Weapon::display()
{
cout << "Weapon Id: " << id << endl;
}

请注意,以上只是一个项目代码的2个文件。但是当我运行它时出现以下错误

1>------ Build started: Project: stacksCheck, Configuration: Debug Win32 ------
1> Weapon.cpp
1>Weapon.obj : error LNK2001: unresolved external symbol "public: class Stack<class Round> * __thiscall Weapon::stack1(int)" (?stack1@Weapon@@QAEPAV?$Stack@VRound@@@@H@Z)
1>C:\Users\yohan\Documents\Visual Studio 2010\Projects\CourseWork2\Debug\CourseWork2.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我 100% 肯定这个错误来自这里

stack1(size);

每当我删除它时,代码都能正常工作!!

stack1 是 Stack 类的对象,其中 Stack 类的构造函数接受整数参数。 Stack 类是一个模板,位于头文件中

我怎样才能摆脱这个错误?

请帮忙!

最佳答案

好吧,你声明了一个你没有提供定义的函数:

class Weapon : public GameObject
{
public:
...
Stack <Round> *stack1(int rounds) ; // <=== DECLARATION IS HERE,
// DEFINITION IS NOWHERE
...
};

显然,链接器提示它找不到 Weapon::stack1() 的定义。 .

Whenever I remove this, the code works fine!!

难怪,您不再调用已声明但未定义的函数。您应该为 Weapon::stack1() 添加一个定义到您的实现文件:

Weapon.cpp

...

Stack<Round>* stack1(int round)
{
...
}

更新:

stack1 is an object to a Stack class, where the constructor of the stack class accepts an integer parameter. The Stack class is a template, located in a header file

我第一次回答这个问题时忽略了这部分。

因此,即使您正在声明一个函数,您的意图似乎是声明一个指针Stack<Round> 类型的对象。 .在那种情况下,忘记定义 stack1()功能,正如我在原始答案中所建议的那样。只需使用正确的语法来声明指针成员变量:

Weapon.h

class Weapon : public GameObject
{
public:
...
Stack<Round>* stack1; // IF YOU WANT TO DECLARE A MEMBER POINTER,
// THIS IS THE CORRECT SYNTAX.
...
};

然后,在 Weapon 的构造函数中类,你可以构建 Stack<Round>对象并分配指针:

Weapon.cpp

Weapon::Weapon(int size)
{
stack1 = new Stack<Round>(size);
}

此外,不要忘记 delete stack1Weapon的析构函数:

Weapon::~Weapon(int size)
{
if (stack1)
{
delete stack1;
}
}

关于c++ - 初始化指向模板的指针时未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15092070/

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