使用链表调用堆栈的默认构造函数获取错误 C2760
Calling a default constuctor for a stack using linked list getting error C2760
好的 运行 进入内部 class 默认构造函数的块。在这个任务中,我必须使用链表创建一个堆栈,我得到了所有设置的函数我只是在尝试为内部 class StackNode 正确设置默认构造函数时遇到了麻烦,至少这是编译器告诉我的.
class StackNode { // this is given in the assignment its not the full .h
public:
StackNode(const DataType& nodeData, StackNode* nextPtr)
{
dataItem = nodeData;
next = nextPtr;
}
DataType dataItem;
StackNode* next;
};
StackNode* top;
};
// here is my default constructor for the class
template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)// <--this part is given inside is what i have done.
{
top = NULL;
StackNode::StackNode(const DataType x = NULL; StackNode * y = nullptr)
{
this->dataItem = x;
this->next = y;
}
//if i remove this i get error C2512 no appropriate default constructor for the StackNode<DataType>::StackNode
}
我还没有找到可以帮助我的帖子,所以我发布了这个帖子,希望能找出我所缺少的东西。
更新 1 -
输出错误
(file dest)\StackLinked.cpp(11,23): error C2760: syntax error: unexpected token 'const', expected ')'
test6.cpp
(file dest)\StackLinked.cpp(11,23): error C2760: syntax error: unexpected token 'const', expected ')'
这是我尝试构建代码时出现的错误
您试图在StackLinked
构造函数的 内部 定义StackNode
构造函数的主体。这是行不通的。它们需要单独定义。但是您已经在 StackNode
class 的声明中内嵌了 StackNode
构造函数的定义,因此无需为该构造函数定义第二个主体。
template <typename DataType>
class StackLinked
{
private:
class StackNode {
public:
StackNode(const DataType& nodeData, StackNode* nextPtr)
{
dataItem = nodeData;
next = nextPtr;
}
DataType dataItem;
StackNode* next;
};
StackNode* top;
public:
StackLinked(int maxNumber);
};
...
template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)
{
top = NULL;
}
否则,不要使 StackNode
构造函数定义为内联,就像您不是 StackLinked
构造函数一样:
template <typename DataType>
class StackLinked
{
private:
class StackNode {
public:
StackNode(const DataType& nodeData, StackNode* nextPtr);
DataType dataItem;
StackNode* next;
};
StackNode* top;
public:
StackLinked(int maxNumber);
};
...
template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)
{
top = NULL;
}
template <typename DataType>
StackLinked<DataType>::StackNode::StackNode(const DataType& nodeData, StackNode* nextPtr)
{
dataItem = nodeData;
next = nextPtr;
}
好的 运行 进入内部 class 默认构造函数的块。在这个任务中,我必须使用链表创建一个堆栈,我得到了所有设置的函数我只是在尝试为内部 class StackNode 正确设置默认构造函数时遇到了麻烦,至少这是编译器告诉我的.
class StackNode { // this is given in the assignment its not the full .h
public:
StackNode(const DataType& nodeData, StackNode* nextPtr)
{
dataItem = nodeData;
next = nextPtr;
}
DataType dataItem;
StackNode* next;
};
StackNode* top;
};
// here is my default constructor for the class
template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)// <--this part is given inside is what i have done.
{
top = NULL;
StackNode::StackNode(const DataType x = NULL; StackNode * y = nullptr)
{
this->dataItem = x;
this->next = y;
}
//if i remove this i get error C2512 no appropriate default constructor for the StackNode<DataType>::StackNode
}
我还没有找到可以帮助我的帖子,所以我发布了这个帖子,希望能找出我所缺少的东西。
更新 1 - 输出错误
(file dest)\StackLinked.cpp(11,23): error C2760: syntax error: unexpected token 'const', expected ')'
test6.cpp
(file dest)\StackLinked.cpp(11,23): error C2760: syntax error: unexpected token 'const', expected ')'
这是我尝试构建代码时出现的错误
您试图在StackLinked
构造函数的 内部 定义StackNode
构造函数的主体。这是行不通的。它们需要单独定义。但是您已经在 StackNode
class 的声明中内嵌了 StackNode
构造函数的定义,因此无需为该构造函数定义第二个主体。
template <typename DataType>
class StackLinked
{
private:
class StackNode {
public:
StackNode(const DataType& nodeData, StackNode* nextPtr)
{
dataItem = nodeData;
next = nextPtr;
}
DataType dataItem;
StackNode* next;
};
StackNode* top;
public:
StackLinked(int maxNumber);
};
...
template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)
{
top = NULL;
}
否则,不要使 StackNode
构造函数定义为内联,就像您不是 StackLinked
构造函数一样:
template <typename DataType>
class StackLinked
{
private:
class StackNode {
public:
StackNode(const DataType& nodeData, StackNode* nextPtr);
DataType dataItem;
StackNode* next;
};
StackNode* top;
public:
StackLinked(int maxNumber);
};
...
template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)
{
top = NULL;
}
template <typename DataType>
StackLinked<DataType>::StackNode::StackNode(const DataType& nodeData, StackNode* nextPtr)
{
dataItem = nodeData;
next = nextPtr;
}