В C++ методы и функции могут быть «объявлены» или «определены».
С заявлением вы передадите компилятору, что определенная функция или объект будут доступны в программе, даже без предоставления, например, фактического тела функции на данный момент.
С определением вы фактически предоставляете тело функции или хранилище и инициализацию объекта.
extern int foo; // this is an integer DECLARATION
int foo = 4; // this is the DEFINITION
double square(double x); // function DECLARATION
// function DEFINITION
double square(double x) {
return x*x;
}
Для классов вещи немного сложнее, потому что две концепции немного перепутаны. Предоставление двух определений, например, было бы логически плохим, но разрешено в C++, если они абсолютно идентичны токену с помощью токена и с тем же значением всех токенов.
Также с классами существуют неявные методы, которые автоматически создаются по умолчанию, если вы их не предоставляете. Например, когда вы пишете:
class Point
{
public:
double x, y;
};
компилятор автоматически завершает свой код, как если бы вы написали вместо
class Point
{
public:
double x, y;
// default constructor
Point()
{
}
// copy constructor
Point(const Point& other)
: x(other.x), y(other.y)
{
}
// assignment operator
Point& operator=(const Point& other)
{
this->x = other.x;
this->y = other.y;
return *this;
}
// destructor
~Point()
{
}
};
Все, являются заявления и определения.
Если же вы предоставляете только декларация для одного из неявно предоставляют методы (как вы сделали для конструктора в классе), то компилятор предполагает, что вы хотите реализовать его самостоятельно по-другому и определение по умолчанию не будет автоматически генерироваться.
Это причина вашей ошибки компиляции: конструктор по умолчанию был объявлен, но не был определен, и при сборке исполняемого файла компилятору не хватало некоторых частей.
Также обратите внимание, что C++ - это очень сложный язык с множеством явно нелогичных (а иногда и просто нелогичных) частей и не является хорошим кандидатом для обучения, экспериментируя. Единственный разумный способ изучения C++ - начать формировать форму good book и читать ее с крышки на обложку ...
Вы связали cpp? – chris
да я очистил и запустил qmake, файлы привязаны – chuckieDub
вы не реализовали Wager :: Wager()? – billz