【发布时间】: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++