编写一个类的定义,该类是另一个类的成员(给定代码,不要问我为什么)。无论如何,我得到一个类型'class'重定义错误,因为我不熟悉c ++,对象的嵌套和限定符'::'
这是stack.h
// rest of code above
public: // prototypes to be used by the client
/** UnderFlow Class
* thrown if a pop or top operation would cause the stack to underflow
*/
class OverFlow
{
public:
/*! @function OverFlow Constructor
* @abstract constructs the overflow object
* @param string the error message of the overflow exception
*/
OverFlow(std::string);
/*! @function getMessage
* @abstract returns the message containing this exception's error text
* @result string the error message of the overflow exception
*/
std::string getMessage();
private:
std::string message;//error text
};
/** UnderFlow Class
* thrown if a pop or top operation would cause the stack to underflow
*/
class UnderFlow
{
public:
/*! @function UnderFlow Constructor
* @abstract constructs the underflow object
* @param string the error message of the underflow exception
*/
UnderFlow(std::string);
/*! @function getMessage
* @abstract returns the message containing this exception's error text
* @result string the error message of the underflow exception
*/
std::string getMessage();
//rest of code below
这是stack.cpp
//rest of code above
class stack::OverFlow
{
string message;
OverFlow::OverFlow()
{
}
OverFlow(string errormessage)
{
OverFlow::message = errormessage;
}
string OverFlow::getMessage()
{
return message;
}
};
class stack::UnderFlow
{
string message;
UnderFlow::UnderFlow()
{
}
UnderFlow::UnderFlow(string errormessage)
{
message = errormessage;
}
string UnderFlow::getMessage()
{
return message;
}
};//rest of code below
我在以下代码行中得到了重新定义错误
class stack::UnderFlow
class stack::OverFlow
我确信这是一个简单的解决方法,我只是没有实践......
答案 0 :(得分:1)
类定义应出现在头文件中,而不是C ++文件中。删除:
class stack::OverFlow
{
来自C ++文件。
答案 1 :(得分:1)
目前你写的
//rest of code above
class stack::OverFlow
{
string message;
OverFlow::OverFlow()
{
}
在stack.cpp
文件中。在cpp文件中编写类主体是不正确的,你应该在标题中这样做,所以你应该删除
class stack::OverFlow
{
来自源文件(cpp
)。你也可以在标题中完成这个(这个是正确的),所以现在你只需删除提到的部分并在cpp
中添加具有正确名称解析的函数定义,如下所示:
stack::OverFlow::OverFlow() // constructor
{
}
string stack::UnderFlow::getMessage() // function definition
{
return message;
}