C ++类作为其他类的成员,如何定义它?

时间:2014-01-29 06:06:22

标签: c++ object syntax

编写一个类的定义,该类是另一个类的成员(给定代码,不要问我为什么)。无论如何,我得到一个类型'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

我确信这是一个简单的解决方法,我只是没有实践......

2 个答案:

答案 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;
}