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;
}
請幫助。我曾經在幾年前編制過程,但我正在努力回到過去。
這兩行是**賦值**,不是初始化。初始化是在恰當命名的初始化列表中完成的,而不是在構造函數的主體中完成的:'rectangle :: rectangle:length(0),width(0){}'如果你不初始化成員,它們將被初始化;對於整數成員它並不重要,但是如果初始化和賦值很昂貴,最好是初始化而不是初始化然後賦值。 –
@PeteBecker我在這裏避免使用一個初始化列表,因爲它對答案並不重要,似乎爲初學者增加了額外的複雜性。儘管對這個sl termin的術語有所瞭解。我對你關於內置類型自動初始化的評論感興趣。我不認爲內置類型的成員默認設置爲任何可預測的值(調試器和valgrind似乎同意)。你是否在說別的,或者是建立在被認爲具有不設定其價值的構造函數的類型中? – simonc