Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化指向模板的指针时未解析的外部符号_C++_Visual Studio 2010_Pointers_Stack - Fatal编程技术网

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

C++ 初始化指向模板的指针时未解析的外部符号,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是堆栈类的对象,其

请看一下下面的代码

武器.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(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;

谢谢您的回复+谢谢你的回复+谢谢你的回复+谢谢你的回复+我发了一封信:)