C++ 初始化指向模板的指针时未解析的外部符号
请看一下下面的代码 武器.hC++ 初始化指向模板的指针时未解析的外部符号,c++,visual-studio-2010,pointers,stack,C++,Visual Studio 2010,Pointers,Stack,请看一下下面的代码 武器.h class Weapon : public GameObject { public: ... Stack<Round>* stack1; // IF YOU WANT TO DECLARE A MEMBER POINTER, // THIS IS THE CORRECT SYNTAX. ... }; ** 无论何时我删除这个,代码都可以正常工作 stack1是堆栈类的对象,其
class Weapon : public GameObject
{
public:
...
Stack<Round>* stack1; // IF YOU WANT TO DECLARE A MEMBER POINTER,
// THIS IS THE CORRECT SYNTAX.
...
};
**
无论何时我删除这个,代码都可以正常工作
stack1
是堆栈类的对象,其中堆栈类的构造函数接受整数参数。堆栈
类是一个模板,位于头文件中
我怎样才能消除这个错误
请帮忙 您声明了一个没有定义的函数:
class Weapon : public GameObject
{
public:
...
Stack <Round> *stack1(int rounds) ; // <=== DECLARATION IS HERE,
// DEFINITION IS NOWHERE
...
};
更新:
stack1
是Stack
类的对象,其中Stack类的构造函数接受整数参数。堆栈
类是一个模板,位于头文件中
我第一次回答这个问题时忽略了这一部分
因此,即使您正在声明一个函数,您的意图似乎是声明一个指向堆栈类型的对象的指针。在这种情况下,请忘记定义stack1()
函数,正如我在原始答案中所建议的那样。只需使用正确的语法来声明指针成员变量:
武器.h
class Weapon : public GameObject
{
public:
...
Stack<Round>* stack1; // IF YOU WANT TO DECLARE A MEMBER POINTER,
// THIS IS THE CORRECT SYNTAX.
...
};
另外,不要忘记在武器的析构函数中删除stack1
:
Weapon::~Weapon(int size)
{
if (stack1)
{
delete stack1;
}
}
您声明了一个未提供定义的函数:
class Weapon : public GameObject
{
public:
...
Stack <Round> *stack1(int rounds) ; // <=== DECLARATION IS HERE,
// DEFINITION IS NOWHERE
...
};
更新:
stack1
是Stack
类的对象,其中Stack类的构造函数接受整数参数。堆栈
类是一个模板,位于头文件中
我第一次回答这个问题时忽略了这一部分
因此,即使您正在声明一个函数,您的意图似乎是声明一个指向堆栈类型的对象的指针。在这种情况下,请忘记定义stack1()
函数,正如我在原始答案中所建议的那样。只需使用正确的语法来声明指针成员变量:
武器.h
class Weapon : public GameObject
{
public:
...
Stack<Round>* stack1; // IF YOU WANT TO DECLARE A MEMBER POINTER,
// THIS IS THE CORRECT SYNTAX.
...
};
另外,不要忘记在武器的析构函数中删除stack1
:
Weapon::~Weapon(int size)
{
if (stack1)
{
delete stack1;
}
}
如果stack1
应该是武器
的数据成员(而不是函数),则应声明如下:
class Weapon :
public GameObject
{
public:
Weapon(int);
~Weapon(void);
Stack <Round> stack1;
Weapon *next;
void display();
};
如果stack1
应该是武器
的数据成员(而不是函数),则应声明如下:
class Weapon :
public GameObject
{
public:
Weapon(int);
~Weapon(void);
Stack <Round> stack1;
Weapon *next;
void display();
};
在武器构造器中尝试以下操作:
stack1=new Stack <Round>(size);
stack1=新堆栈(大小);
同时更新武器。h:
Stack <Round> *stack1;
Stack*stack1;
在武器构造中尝试以下操作:
stack1=new Stack <Round>(size);
stack1=新堆栈(大小);
同时更新武器。h:
Stack <Round> *stack1;
Stack*stack1;
谢谢您的回复+谢谢你的回复+谢谢你的回复+谢谢你的回复+我发了一封信:)