所以我是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)); }
};
答案 0 :(得分:2)
在C ++中,编译器从上到下读取代码,一次。从早期的C编译器只有几千字节的内存开始工作时,这是一个延续 - C的设计使得编译器一次只需要查看一点代码。
因此,在尝试使用它们之前,必须根据需要声明或定义事物。
在main
之前将这两个类移到某处。 GeometricFigure
必须在EquilateralTriangle
之前,EquilateralTriangle
必须在main
之前。
答案 1 :(得分:0)
你需要&#34;声明&#34;或告诉编译器,在哪里寻找EquilateralTriangle和GeometricFigure,&#34;之前&#34;你先用它。您可能想看看 - C# declarations vs definitions
上的类似讨论