Я пытаюсь создать два простых класса, но по какой-то причине этот код не компилируется. Это говорит, что я вызываю point :: point без аргументов, но единственный раз, когда я вызываю point :: point, находится в основной функции, и я вызываю ее с помощью аргументов.Почему этот конструктор вызывает другое без аргументов?
При отладке я обнаружил, что это конструктор для string_two_points, который вызывает конструктор для точки.
#include <iostream>
#include <string>
using namespace std;
class point{
public:
int x;
int y;
point(int x, int y): x(x),y(y){};
point(const point & c): x(c.x), y(c.y) {};
};
class string_two_points{
public:
string type;
point x;
point y;
string_two_points(string type, point & xc):type(type){
x=xc;
};
string_two_points(string type, point & xc, point & yc):type(type){
x=xc;
y=yc;
};
};
int main(){
point a = point(2,3);
point b = point(3,4);
string_two_points x = string_two_points(string("abc"),a,b);
return 0;
}
'' string_two_points' имеет точку х, 'в качестве члена. Поэтому, когда вы создаете 'string_two_points', он строит' x', который включает вызов конструктора 'x'. –
Вы должны сообщить нам, где возникает жалоба компилятора. ctors часто вызываются по причинам, которые вы явно не кодировали. Вы показываете два ctors. Возможно, компилятор предоставил несколько других, включая по умолчанию ctor. –
@ Компилятор DOUGLASO.MOEN не предоставляет конструктор по умолчанию, если имеется предоставленный пользователем конструктор –