关于对象创建的C ++ Undeclared标识符

时间:2016-01-18 04:16:23

标签: c++ object

所以我是c +的新手,来自C#。这在编译时给了我几个错误,这些错误似乎与这个对象声明有关。有谁能告诉我正确的方法吗?

我得到一个未声明的标识符,我声明tri(sideLength)。

我使用this作为对象声明的参考,但它似乎没有帮助我。

感谢。

#include <iostream>    // Provides cout
#include <iomanip>     // Provides setw function for setting output width
#include <cstdlib>     // Provides EXIT_SUCCESS
#include <cassert>     // Provides assert function
#include <stdexcept>
#include <math.h> 

using namespace std;   // Allows all standard library items to be used

void setup_cout_fractions(int fraction_digits)
// Precondition: fraction_digits is not negative.
// Postcondition: All double or float numbers printed to cout will now be
// rounded to the specified digits on the right of the decimal.
{
    assert(fraction_digits > 0);
    cout.precision(fraction_digits);
    cout.setf(ios::fixed, ios::floatfield);
    if (fraction_digits == 0)
        cout.unsetf(ios::showpoint);
    else
        cout.setf(ios::showpoint);
}

int main()
{
    const int MAX_SIDE_LENGTH = 6;
    const int INITIAL_LENGTH = 1;
    const int DIGITS = 4;
    const int ARRAY_SIZE = 6;

    // Set up the output for fractions and print the table headings.
    setup_cout_fractions(DIGITS);

    // Each iteration of the loop prints one line of the table.
    for (int sideLength = 0; sideLength < MAX_SIDE_LENGTH; sideLength += 1)
    {
        EquilateralTriangle tri(sideLength);
        //Square sq(sideLength);
        //Pentagon_Reg pent(sideLength);
        //Hexagon_Reg hex(sideLength);
        //Heptagon_Reg hept(sideLength);
        //Octagon_Reg octa(sideLength);

        cout << "Type: " << tri.Name() << "has area: " << tri.Area() << " with SideLength = " << sideLength;
    }

    return EXIT_SUCCESS;
}

//Template

class GeometricFigure
{
public:
    GeometricFigure() { }
    double SideLength;
    virtual double Area() { return 0; };
    virtual char* Name() { return ""; };
};

class EquilateralTriangle : public GeometricFigure {
public:
    EquilateralTriangle(double sideLength)
    {
        SideLength = sideLength;
    }
    char* Name() { return "Equilateral Triangle"; }
    double Area() { return (sqrt(3) / 2 * pow(SideLength, 2)); }
};

2 个答案:

答案 0 :(得分:2)

在C ++中,编译器从上到下读取代码,一次。从早期的C编译器只有几千字节的内存开始工作时,这是一个延续 - C的设计使得编译器一次只需要查看一点代码。

因此,在尝试使用它们之前,必须根据需要声明或定义事物。

main之前将这两个类移到某处。 GeometricFigure必须在EquilateralTriangle之前,EquilateralTriangle必须在main之前。

答案 1 :(得分:0)

你需要&#34;声明&#34;或告诉编译器,在哪里寻找EquilateralTriangle和GeometricFigure,&#34;之前&#34;你先用它。您可能想看看 - C# declarations vs definitions

上的类似讨论