2013-08-21 50 views
0

以下代碼是教程的一部分。我檢查了代碼對本教程許許多多次,雖然它的工作原理上的視頻,我的程序有以下錯誤:錯誤LNK2019:函數_main中引用的無法解析的外部符號「public:__thiscall rectangle :: rectangle(void)」(?? 0rectangle @@ QAE @ XZ)

1>------ Build started: Project: simpleclass, Configuration: Debug Win32 ------ 
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall rectangle::rectangle(void)" ([email protected]@[email protected]) referenced in function _main 
1>C:\Users\Bob K\Documents\Visual Studio 2010\Projects\simpleclass\Debug\simpleclass.exe : fatal error LNK1120: 1 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

這是代碼:

#include <iostream> 

class rectangle 
{ 
private: 
    double length; 
    double width; 
public: 
    rectangle(); 
    ~rectangle(); 
     double calcperim() const; 
     double calcarea() const; 
     double getlength() const; 
     double getwidth() const; 
     void setlength(double l); 
     void setwidth(double w); 

}; 

rectangle::~rectangle() 
{ 
} 

double rectangle::calcperim() const 
{ 
    return (length + length + width + width); 
} 

double rectangle::getlength() const 
{ 
    return length; 
} 

double rectangle::getwidth()const 
{ 
    return width; 
} 

void rectangle::setwidth(double w) 
{ 
    width = w; 
} 
void rectangle::setlength(double l) 
{ 
    length = l; 
} 

double rectangle::calcarea() const 
{ 
    return (length * width); 
} 



int main() 
{ 
using namespace std; 

    rectangle r; 
    r.setwidth(3); 
    r.setlength(9); 

    cout << "length " << r.getlength() << endl; 
    cout << "width " << r.getwidth() << endl; 
    cout << "perimiter: " << r.calcperim() << endl; 
    cout << "Area: " << r.calcarea() << endl; 


    system("pause"); 
return 0; 
} 

請幫助。我曾經在幾年前編制過程,但我正在努力回到過去。

回答

5

你缺少rectangle構造

rectangle::rectangle() 
{ 
    length = 0; 
    width = 0; 
} 

的實現或者,如果你不關心初始化成員,只是刪除從類定義構造函數的定義。 (請注意,這可能不是可取的;我只是爲了完整而包括它。)

+1

這兩行是**賦值**,不是初始化。初始化是在恰當命名的初始化列表中完成的,而不是在構造函數的主體中完成的:'rectangle :: rectangle:length(0),width(0){}'如果你不初始化成員,它們將被初始化;對於整數成員它並不重要,但是如果初始化和賦值很昂貴,最好是初始化而不是初始化然後賦值。 –

+0

@PeteBecker我在這裏避免使用一個初始化列表,因爲它對答案並不重要,似乎爲初學者增加了額外的複雜性。儘管對這個sl termin的術語有所瞭解。我對你關於內置類型自動初始化的評論感興趣。我不認爲內置類型的成員默認設置爲任何可預測的值(調試器和valgrind似乎同意)。你是否在說別的,或者是建立在被認爲具有不設定其價值的構造函數的類型中? – simonc

相關問題