将对象嵌套在类中

时间:2014-06-30 18:45:28

标签: c++ class syntax-error inner-classes

使用C ++我试图将一个类的对象嵌套在另一个类中,并且在CarpetClass.h的第6行出现语法错误,该错误表示

  

错误:功能"矩形"不是类型名称

myclass.h

class Rectangle{
private:
    double length;
    double width;
public:
    void setLength(double len){
        length = len;
    }
    void setWidth(double wid){
        width = wid;
    }
    double getLength(){
        return length;
    }
    double getWidth(){
        return width;
    }
    double getArea(){
        return length*width;
    }
};

CarpetClass.h

#include "myclass.h"

class Carpet{
private:
    double pricePerSqYd;
    Rectangle size;
public:
    void setPricePeryd(double p){
        pricePerSqYd = p;
    }
    void setDimensions (double len, double wid){
        size.setLength(len / 3);
        size.setWidth(wid / 3);
    }
    double getTotalPrice(){
        return (size.getArea*pricePerSqYd);
    }
};   

Source.cpp

#include <iostream>
#include "CarpetClass.h"
using namespace std;

int main(){
    Carpet purchase;
    double pricePerYd;
    double length;
    double width;

    cout << "Room length in feet: ";
    cin >> length;
    cout << "Room width in feet: ";
    cin >> width;
    cout << "Carpet price per sq. yard: ";
    cin >> pricePerYd;
    purchase.setDimensions(length, width);
    purchase.setPricePeryd(pricePerYd);
    cout << "\nThe total price of my new " << length << "x" << width << " carpet is $" << purchase.getTotalPrice() << endl;
}

我不知道为什么我收到错误,我从我的教科书中复制了示例代码。我已经尝试将两个类放在我的cpp文件中,并将它们放在同一个头文件中。这些解决方案都没有奏效。请帮助我理解为什么我收到此错误。

2 个答案:

答案 0 :(得分:3)

class Carpet{
private:
    double pricePerSqYd;
    class Rectangle size;

class Rectangle将使编译器理解您的意思是您的类的名称而不是&#34; Windows函数使用设备上下文绘制矩形&#34;

使用命名空间避免名称冲突是一种很好的做法。或者,或者使用类似&#34;使用 C &#34;,class CRectangle{...添加类名称之类的惯例,然后它不会与类似的功能碰撞#39;名称

答案 1 :(得分:0)

使用这个非常简单的驱动程序代码:

#include "CarpetClass.h"

int main()
{
    Carpet c;
}

代码在Linux下使用gcc完全编译,但如果我修复了成员函数,

double getTotalPrice(){
    return (size.getArea()*pricePerSqYd);
}

您是否确定自己未包含任何定义Rectangle的内容?您可能还希望在标头中插入一些#include防护,并提供默认的构造函数和析构函数。

要问一个更好的问题,下次尝试直接从您的计算机上剪切并粘贴代码(以及错误消息!),以避免浪费时间的错别字。