【问题标题】:pointer as member functions errors指针作为成员函数错误
【发布时间】:2014-11-08 13:05:42
【问题描述】:

我正在尝试创建以下成员函数,但出现以下错误:

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\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(534): 错误 > C2143:语法错误:缺少“;”在'ListStudentGradeDB::msort'之前 > 1>c:\users\vypham\documents\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(534): 错误 > C4430:缺少类型说明符 - 假定为 int。注意:C++ 没有 > 支持 default-int 1>c:\users\vypham\documents\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(535): 错误 > C4430:缺少类型说明符 - 假定为 int。注意:C++ 没有 > 支持 default-int 1>c:\users\vypham\documents\visual studio > 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\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.h(88):见 > 'ListStudentGradeDB::msort' 的声明 > 1>c:\users\vypham\documents\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(535): 错误 > C2040: 'ListStudentGradeDB::msort' : 'int (ListStudentGradeDB::node > *,int)' 与 'ListStudentGradeDB::nodePtr (ListStudentGradeDB::nodePtr,int)' 的间接级别不同 > 1>c:\users\vypham\documents\visual studio > 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\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(553): 错误 > C4430:缺少类型说明符 - 假定为 int。注意:C++ 没有 > 支持 default-int 1>c:\users\vypham\documents\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(553): 错误 > C2086:'int nodePtr':重新定义 1> > c:\users\vypham\documents\visual studio > 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++ 没有 > 支持 default-int 1>c:\users\vypham\documents\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.cpp(554): 错误 > C2556: 'int > ListStudentGradeDB::merge(ListStudentGradeDB::nodePtr,ListStudentGradeDB::nodePtr,int,int)' > : 重载函数的不同之处仅在于返回类型 > 'ListStudentGradeDB::nodePtr > ListStudentGradeDB::merge(ListStudentGradeDB::nodePtr,ListStudentGradeDB::nodePtr,int,int)' > 1> c:\users\vypham\documents\visual studio > 2012\projects\cmpe_180\cmp180_final\liststudentgradedb.h(89):见 > 'ListStudentGradeDB::merge' 的声明 > 1>c:\users\vypham\documents\visual studio > 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\visual studio > 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::nodePtr 在类外实现中的返回类型?

标签: c++


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    nodePtr ListStudentGradeDB::merge( ...
    

    nodePtrListStudentGradeDB 中定义,就像merge 一样。因此,您需要确保按如下方式访问该范围:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多