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