2017-05-11 5 views
1

전장의 시작 부분에 다형성을 구현하려고합니다.하지만 기본 클래스 생성자를 호출하려고 할 때 내 식별자 중 하나가 정의되지 않은 인텔리 센스 오류가 계속 발생합니다. 여기 C++ 다형성 생성자 오류입니다. 식별자가 정의되지 않았습니다

는 Ship.h 기본 클래스에 대한 코드입니다 :

#ifndef SHIP_H 
#define SHIP_H 
#include <iostream> 

class Ship 
{ 
public: 
Ship(int, int); 
void setX(int); 
int getX() const; 
void setY(int); 
int getY() const; 
private: 
    int x; 
    int y; 
}; 


#endif 

을하고 여기의 생성자

#include "Ship.h" 

using namespace std; 

Ship::Ship(int userX, int userY) 
{ 
    setX(userX); 
    setY(userY); 
} 

파생 클래스 헤더입니다 :

#ifndef FRIGATE_H 
#define FRIGATE_H 

#include "Ship.h" 

class Frigate : public Ship { 
public: 
    Frigate(int); 
    void placeShip(); 
    void setLength(int); 
    int getLength() const; 
private: 
    int length; 
}; 

#endif 

과의 생성자

#include <iostream> 
#include "Frigate.h" 

using namespace std; 

Frigate::Frigate(int specLength) : Ship(userX, userY) 
{ 
    setLength(specLength); 
} 

식별자가 userXuserY 인 선박 제작자를 호출하려고하면 오류가 발생하지만 기본 클래스의 생성자에서 정의했습니다. 나는 무엇을 잘못 했는가?

+0

'Frigate' 이니셜 라이저에서 기본 클래스 생성자에 정의되지 않은 변수'userX'와'userY'를 전달하면 컴파일러는 그 변수를 알지 못한다고 올바르게 알립니다. –

답변

2

기본 클래스 생성자는 2 개의 인수를 취합니다. 파생 클래스 생성자는 인수 하나만 사용합니다. 파생 클래스의 생성자가 호출되면,

내가 Frigate 클래스의 생성자가

Frigate::Frigate(int userX, int userY, int specLength) : Ship(userX, userY), length(specLength) 
{ 
} 
같이해야한다고 생각 ... 그것은 기본 클래스 생성자를 호출하지만 당신은 그에게 그것이 필요로하는이 개 값을 제공해야
+0

무작위 화하고자하지 않는 한, 무작위로 호출 한 후 기본 생성자를 '프리깃'생성자 본문 내부에서 호출해야합니다. 나는 그가 원하는 걸 짐작하고있다. – Donnie

+1

@Donnie이 경우 생성자의 본문을 실행하기 전에 호출 체인을 완료해야하기 때문에 Ship에 대한 기본 (빈) 생성자를 정의해야합니다. 당신이 말한대로 우리는 그가 원하는 것을 완전히 확신하지 못합니다. – AlexG

+0

고마워, 나는 내가 잊어 버린 것이 거의 없다는 것을 알았다. – stor314