c++ - 找不到成员函数的标识符

标签 c++ oop object linked-list header-files

出于某种原因,每当我尝试使用 appendNode() 时,我总是收到“找不到标识符”错误。此外,我不断收到一条错误消息,提示我缺少“;”在“使用”之前没有任何意义。

头文件

#ifndef INTEGERLIST_H
#define INTEGERLIST_H
#include <iostream>
using namespace std;

class IntegerList
{
private:
    struct ListNode
    {
        int value;
        struct ListNode *next;
    };

    ListNode *head;

public:
    IntegerList()
    {
        head = NULL;
    }

    ~IntegerList();

    void appendNode(int);
    void insertNode(int);
    void deleteNode(int);
    void printList() const;
}
#endif

执行文件

#include "IntegerList.h"
#include <iostream>
using namespace std;


void IntegerList::appendNode(int num)
{
    ListNode *newNode;
    ListNode *nodePtr;

    //new allocation
    newNode = new ListNode;
    newNode->value = num;
    newNode->next = NULL;

    if (!head)
        head = newNode;

    else
    {
        nodePtr = head;

        while(nodePtr->next)
            nodePtr = nodePtr->next;

        nodePtr->next = newNode;
    }
}

void IntegerList::insertNode(int num)
{
    ListNode *newNode;
    ListNode *nodePtr;
    ListNode *previousNode = NULL;

    newNode = new ListNode;
    newNode->value = num;

    if(!head)
    {
        head = newNode;
        newNode->next = NULL;
    }
    else
    {
        nodePtr = head;

        previousNode = NULL;

        while(nodePtr != NULL && nodePtr->value < num)
        {
            previousNode = nodePtr;
            nodePtr = nodePtr->next;
        }

        if(previousNode == NULL)
        {
            head = newNode;
            newNode->next = nodePtr;
        }
        else
        {
            previousNode->next = newNode;
            newNode->next = nodePtr;
        }
    }
}

void IntegerList::deleteNode(int num)
{
    ListNode *nodePtr;
    ListNode *previousNode;

    if(!head)
        return;

    if(head->value == num)
    {
        nodePtr = head->next;
        delete head;
        head = nodePtr;
    }

    else
    {
        nodePtr = head;

        while(nodePtr != NULL && nodePtr->value != num)
        {
            previousNode = nodePtr;
            nodePtr = nodePtr->next;
        }

        if(nodePtr)
        {
            previousNode->next = nodePtr->next;
            delete nodePtr;
        }
    }
}

void IntegerList::printList() const
{
    ListNode *nodePtr;

    nodePtr = head;

    while(nodePtr)
    {
        cout << nodePtr->value << endl;

        nodePtr = nodePtr->next;
    }
}

最佳答案

#include 直接从另一个文件复制,因为这是由预处理器完成的,编译器并不知道发生了什么,并给你错误,就好像它只是一个错误一样大文件。所以在你的代码中你有(在下面简化):

// header.h
class A{
   // ...
}

// code.cpp
#include "header.h"
using namespace std;

所以这被转换为:

// code.cpp
class A{
   // ...
}
using namespace std;

这样错误就更清楚了。在 using 之前需要 ; 因为类声明必须以 ; 结尾。

关于c++ - 找不到成员函数的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021196/

相关文章:

c++ - 带生产者/消费者模型的文件复制工具

C++模板化构造函数无法编译

oop - 内聚力和耦合之间的区别

javascript - 对象字面量符号 vs 原型(prototype)速度和内存

c# - 使用不同的构造函数实例化新对象

javascript - 在数组中的对象中映射对象

c++ - 使用自定义构造函数将对象实例化为类属性 (C++)

c++ - 这应该调用赋值运算符,但是如何调用呢?

c++ - 使用可变参数模板将 vector 中的参数应用于函数时出现奇怪错误

javascript - 访问在 javascript 中存储为 session 变量的 List 对象