2016-01-18 64 views
0

所以我對來自C#的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之前。

+0

謝謝!有趣的背景也是如此。 –

0

您需要「聲明」或告訴編譯器,在哪裏查找EquilateralTriangle和GeometricFigure,「先於」您先使用它。你可能想看看類似的討論 - C# declarations vs definitions