저는 C++을 처음 사용하기 때문에 OCaml과 Python에서 더 많은 경험을 쌓았습니다. 저는 "Morpion Solitaire"프로그램을 만들어 C++을 배우고 싶습니다. 나의 시작은 약간 어렵다. 다음 코드에서C++ : 클래스 멤버를 정의에 연결
:
[email protected]:~/Travail/Cplusplus/morpion++$ g++ -c morpion.cc
morpion.cc: In constructor ‘Line::Line(char, char, direction, char, char)’:
morpion.cc:29:57: error: no matching function for call to ‘Coords::Coords()’
Line(char x1, char y1, direction d, char x2, char y2) {
^
morpion.cc:29:57: note: candidates are:
morpion.cc:11:3: note: Coords::Coords(char, char)
Coords(char xx,char yy){
^
morpion.cc:11:3: note: candidate expects 2 arguments, 0 provided
morpion.cc:6:7: note: Coords::Coords(const Coords&)
라는 메시지를 이해하지 않습니다
typedef enum {NORTH, NORTHEAST, EAST, SOUTHEAST} direction;
char deltax[4] = { 0, 1, 1, 1};
char deltay[4] = { 1, 1, 0, -1};
class Coords {
private:
char x,y;
public:
Coords(char xx,char yy){
x = xx;
y = yy;
};
char get_x() const { return x;}
char get_y() const { return y;}
};
class Line {
private:
Coords orig;
direction dir;
Coords newcross;
public:
Line(char x1, char y1, direction d, char x2, char y2) {
orig = Coords(x1,y1);
dir = d;
newcross = Coords(x2,y2);
};
Coords nthpoint(char n) {
char x,y;
x = orig.get_x() + n*deltax[dir];
y = orig.get_y() + n*deltay[dir];
return Coords(x,y);
};
};
컴파일러는이 나에게 알려줍니다. Coords
클래스에 대해 2 개의 인수 생성자를 제공했지만 컴파일러는 orig = Coords(x1,y1)
이 0 인수로 생성자를 호출한다는 것을 계속해서 알려줍니다.
무엇을 놓쳤습니까?
비고 : 나는 처음 ... 다른 파일에 좌표 및 라인의 선언을 넣어, 나는 문제가 해결되지 않은 적절한 #include
를 사용하지만, 하나 개의 파일에 최선을 다하는하지 않았다 생각
컴파일러는'orig = Coords (x1, y1)'(할당 및 초기화가 아니라)를 가리 키지 않고 매개 변수 목록과 함수 본문 사이의 공백을 가리 킵니다. [Here] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)는 추천 도서 목록입니다. – molbdnilo
생성자의 본문에서 할당에 대한 초기화 목록을 선호합니다. 또한 C++ 11 멤버 초기화 및 균일 초기화를 선호합니다. –