我的类的成员函数无法正常工作。知道为什么吗?
The member functions of my class aren't working properly. Any idea why?
我做了一个链接的列表类来练习通用编程。以下代码编译,但是我在MAIN中的测试并没有像应该的那样向控制台打印任何内容。知道为什么吗?我知道堆栈溢出不喜欢"修复我的错误"帖子,但是我真的很茫然。
#include <iostream>
template <class T> class List {
public:
List();
~List();
int getSize();
void push_back(T);
bool contains(T);
private:
struct node {
T val;
node* next;
};
int size;
node* firstNodePtr;
node* lastNodePtr;
};
template <class T> List<T>::List() {
size = 0;
firstNodePtr = NULL;
lastNodePtr = NULL;
}
template <class T> List<T>::~List() {
node* curNodePtr = firstNodePtr;
node* nextNodePtr;
while (curNodePtr) {
nextNodePtr = curNodePtr->next;
delete curNodePtr;
curNodePtr = nextNodePtr;
}
}
template <class T> int List<T>::getSize() {
return size;
}
template <class T> void List<T>::push_back(T newElement) {
if (size == 0) {
firstNodePtr = new node;
firstNodePtr->next = lastNodePtr;
firstNodePtr->val = newElement;
++size;
} else {
node* newNode = new node;
lastNodePtr->next = newNode;
newNode->val = newElement;
newNode->next = NULL;
++size;
}
}
template <class T> bool List<T>::contains(T thisElement) {
node* curNodePtr = firstNodePtr;
while (curNodePtr) {
if (curNodePtr->val == thisElement)
return true;
curNodePtr = curNodePtr->next;
}
return true;
}
int main (int argc, char* const argv[]) {
List<int> myList;
myList.push_back(5);
myList.push_back(18);
std::cout << myList.getSize() << std::endl;
std::cout << myList.contains(18);
return 0;
}
在这里看:
if (size == 0){
firstNodePtr = new node;
firstNodePtr->next = lastNodePtr;
firstNodePtr->val = newElement;
++size;
}
您忘记将值分配给lastNodePtr
。因此,当您尝试在第二个呼叫push_back
中将其解释时,您会得到不确定的行为。
在块中处理push_back
中初始节点的创建,
您不想要这条线:
firstNodePtr->next = lastNodePtr;
另外,您需要在push_back
lastNodePtr = firstNodePtr;
相关文章:
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 为什么我的 std::ref 无法按预期工作?
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 有人能解释一下为什么下界是这样工作的吗C++的
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么stream::忽略未按预期工作
- 为什么 HeapFree() 不能正常工作?
- 为什么我在 AVR 中的中断无法正常工作?
- 为什么指针在对二维数组进行排序时无法正常工作?
- 为什么C++需要公共继承,忽略朋友声明,才能使动态向下工作?
- 为什么 sizeof(ar)/ sizeof(ar[0]) 在传递给函数时无法在向量上正常工作?
- 为什么它在不分配内存的情况下工作正常
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- std::async 如何工作:为什么它会调用这么多次复制/移动?
- 静态 constexpr 函数在模板结构中工作,但不能在结构中工作.为什么?
- 禁用 GPU 使我的 CNTK 程序正常工作.为什么
- C++余弦在没有 std 命名空间的情况下工作 - 为什么
- c++的pow(2,1000)对于double来说通常太大了,但它正在工作.为什么
- 程序不是在win上工作,而是在mac上工作.为什么?
- 当我用字符串代替char时,代码可以完美地工作.为什么如此