作为成员的指针函数错误

pointer as member functions errors

本文关键字:函数 错误 指针 成员      更新时间:2023-10-16

我正在尝试创建以下成员函数,但我得到了以下错误:

class ListStudentGradeDB
{
private:

public:
    struct node 
    {
        std::string studentName;
        int studentScore;
        node *next;
    };
    // line below is to create shortcut to node* nodePtr.
    typedef struct node* nodePtr;
    nodePtr head;
    nodePtr curr;
    nodePtr temp;

    // Constructor
    ListStudentGradeDB();

    // member functions for merge sort
    void MergeSort();
    nodePtr msort(nodePtr start, int size);
    nodePtr merge(nodePtr list1, nodePtr list2, int size1, int size2);
    // Destructor
    ~ListStudentGradeDB(void);

};

    //ListStudentGradeDB.cpp 
    nodePtr ListStudentGradeDB::msort(node* start, int size)
    {
        if(size > 1)
        {
            int midSize = size/2;
            int count = midSize;
            node* mid = start;
            while(count)
        {
            mid = mid->next;
            count--; 
        }
        return merge(msort(start, midSize), msort(mid, size - midSize), midSize, size - midSize);
    }
    else
        return start;
}   

nodePtr ListStudentGradeDB::merge(nodePtr list1, nodePtr list2, int size1, int size2)
{
    // Trivial cases
    if(size1 == 0)
        return list2;
    if(size2 == 0)
        return list1;
    // Choose the bigger element from the front of the two lists
    // and put it at the head of the new list and call merge 
    // again with the sub lists
    if (list1->studentScore < list2->studentScore || list1->studentScore == list2->studentScore)
    {
        list1->next = merge(list1->next, list2, size1-1, size2);
        return list1;
    }
    else
    {
        list2->next = merge(list1, list2->next, size1, size2-1);
        return list2;
    }
}

错误

>1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(534):错误>C2143:语法错误:缺少";"在"ListStudentGradeDB::msort"之前>1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(534):错误>C4430:缺少类型说明符-假定为int。注意:C++没有>支持默认的int 1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(535):错误>C4430:缺少类型说明符-假定为int。注意:C++没有>支持默认的int 1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(535):错误>C2556:"int ListStudentGradeDB::msort(ListStudentGradeDB:,node*,int)">:重载函数与的不同之处仅在于返回类型>'ListStudentGradeDB::nodePtr>ListStudentGradeDB::msort(ListStudentGradeDB::nodePtr,int)'1>>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.h(88):请参阅>"ListStudentGradeDB::msort"的声明>1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(535):错误>C2040:"ListStudentGradeDB::msort":"int(ListStudentGradeDB:节点>*,int)'在间接级别上与'ListStudentGradeDB::nodePtr(ListStudentGradeDB:;nodePtr,int)]不同>1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(546):错误>C2264:"ListStudentGradeDB::msort":函数定义或>申报;函数未调用1>c:\users\vypham\documents\visual>工作室>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(553):错误>C2143:语法错误:缺少";"在"ListStudentGradeDB::merge"之前>1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(553):错误>C4430:缺少类型说明符-假定为int。注意:C++没有>支持默认的int 1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(553):错误>C2086:"int nodePtr":重新定义1>>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(534):请参阅>"nodePtr"1>的声明c:\users\vypham\documents\visual studio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(554):错误>C4430:缺少类型说明符-假定为int。注意:C++没有>支持默认的int 1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(554):错误>C2556:'int>ListStudentGradeDB::merge>:重载函数与的不同之处仅在于返回类型>'ListStudentGradeDB::nodePtr>ListStudentGradeDB::merge>1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.h(89):请参阅>"ListStudentGradeDB::merge"的声明>1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(554):错误>C2040:"ListStudentGradeDB::merge":"int>(ListStudentGradeDB::nodePtr,ListStudentGradeDB::nodePtr,int,int)'>间接级别与'ListStudentGradeDB::nodePtr不同>(ListStudentGradeDB::nodePtr,ListStudentGradeDB::nodePtr,int,int)'>1>c:\users\vypham\documents\visualstudio>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(568):错误>C2264:"ListStudentGradeDB::merge":函数定义错误或>申报;函数未调用1>c:\users\vypham\documents\visual>工作室>2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(573):错误>C2264:'ListStudentGradeDB::merge'

我正在尝试为两个成员函数返回指针。有人能帮忙吗?

nodePtr具有类作用域,因此需要在ListStudentGradeDB.cpp中的定义中写入ListStudentGradeDB::nodePtr。

您的问题很可能在于函数的实现:

nodePtr ListStudentGradeDB::merge( ...

nodePtrmerge一样在ListStudentGradeDB中定义。因此,您需要确保访问该范围如下:

ListStudentGradeDB::nodePtr ListStudentGradeDB::merge( ...